Java常量设计原则
- java无const关键字
- 不能修改——final
- 不会修改/只读/只要一份 static
- 方便访问 public
- 建议变量名称全部大写
一种特殊的常量:接口内定义的变量默认是常量。
Java常量池
-
常量池:相同的值只存储一份,节省内存,共享访问。
-
基本类型的包装类:
- Boolean,Byte,Short,Integer,Long,Character,Float,Double
- Boolean:true,false
- Byte,Character:\u0000–\u007f(0-127)
- Short,Int ,Long:-128-127
- Float,Double:没有缓存(常量池)
-
Java为常量字符串都建立了常量池缓存机制。
-
基本类型的包装类和字符串有两种创建方式:
1.常量式(字面量)赋值创建,放在栈内存 (将被常量化)
2.new对象进行创建,放在堆内存 (不会常量化) -
这两种创建方式导致创建的对象存放的位置不同
不可变对象
-
不可变对象(Immutable Object)
1.一旦创建,这个对象(状态/值)不能被更改。
2 其内在的成员变量的值就不能修改了。 -
典型的不可变对象
八个基本型别的包装类的对象和String,BigInteger和BigDecimal等的对象。 -
可变对象(Mutable Object)
包含有普通对象等。
不可变对象,也是传指针(引用)。由于不可变,临时变量指向新内存,外部实参的指针不改动。
- 不可变对象(Immutable Object)优点:
只读,线程安全.并发读,提高性能.可以重复使用
缺点:制造垃圾,浪费空间.
参考:1.中国大学MOOC Java核心技术