Java核心技术(初阶)知识点复习——[8]常量设计和常量池
1.常量
java中自己定义的“一个”“不会”修改的变量:public,static,final;
建议变量名字全大写,并以“_”链接;
注:接口中定义的变量都默认为常量,回顾一下“契约精神”,如:
1 public interface SpecialAnimal{ 2 String color = "yellow";//默认为:public static final String color = "RED" 3 public void move(); 4 }
1 public class Cat implements SpecialAnimal{ 2 public void move(){ 3 System.out.println("I can move")//这里回顾下,实现一个接口必须实现所有的方法 4 } 5 6 public static void main(String[] args){ 7 Cat cat = new Cat(); 8 cat.color = "white";//报错,因为color默认为常量啦,(认为都是黄猫) 9 } 10 }
2.常量池
[1]Java为很多基本类型的包装类/字符串都建立常量池,基本类型除了floar和double都封装成了包装类,在内存中有缓存;
[2]包括:boolean→Boolean;
byte→Byte;char→Character;\u000~\u007f
int→Integer;short→Short;long→Long;-128~127;注意:超过了常量池存储范围时,就不存在缓存了;
常量字符串都建立常量池缓存机制,同时,存在常量字符串存储的自动优化;
基本类型自动装箱和拆箱机制,String没有;
[3]常量化创建方法
1 Integer a = 10; 2 String b = "abc"; 3 ****************************** 4 Integer c = new Integer(10); 5 String d = new String("abc");
1~2行是字面量(常量式)赋值创建,存储在栈内存,即被常量化;
3~4行是对象形式创建,存储在堆内存,不会被常量化;
3.String是一种典型的不可变对象
[1]故String类型不可直接修改,因为每次修改都重新申请了一块内存,故效率差;
[2]只可以使用StringBuffer和StringBulider类的append方法进行原地址修改;
StringBuffer线程安全但速度小于StringBulider