Java中有多种常量的比较方式,以下进行总结:
常量池的意义:常量池是为了避免频繁的创建和销毁对象而影响系统性能,其实现了对象的共享。
注:其中Float和Double为什么没有设置常量池技术呢?
回答:其实我在网上查了很久,都没有一个非常明确说明没有其常量池的原因。我个人的理解是,常量池的目的就是为了避免频繁的创建和销毁对象而影响系统性能,以Integer为例,设置[-128,127]申明变量是命中此区间中的数时,如果常量池中存在这个变量,则返回这个变量的地址,如果没有这个变量,则在常量池中创建这个常量存入常量池,并返回该地址。个人理解由于Float和Double带小数(非实数),很难去界定一个范围,使之被命中的概率降低,大概率情况下还是会无法命中(如果我们界定一个我们所谓的合理区间),那么设置常量池的意义就不大了。
基本类型的包装类和字符串类有两种创建方式:
(1)常量式赋值创建,放在栈内存当中(即被常量化)
Integer a = 10;
String str = "abc";
(2)new对象进行创建,放在堆内存中(不会常量化)
Integer a = new Integer(10);
String str = new String("abc");
注意ÿ