Java 8种基本类型包装类和String的常量池

来源:互联网 发布:如何防止sql注入 编辑:程序博客网 时间:2024/05/27 01:00

Byte,Short,Integer,Long

通过如下代码输出可以看出常量池数值范围为-128~127。

Integer i1 = -129;Integer i2 = -129;System.out.println("i1=i2\t" + (i1 == i2));i1 = -128;i2 = -128;System.out.println("i1=i2\t" + (i1 == i2));i1 = 127;i2 = 127;System.out.println("i1=i2\t" + (i1 == i2));i1 = 128;i2 = 128;System.out.println("i1=i2\t" + (i1 == i2));

输出结果:
i1=i2 false
i1=i2 true
i1=i2 true
i1=i2 false

Character

通过如下代码输出可以看出常量池数值范围为0~127。

Character i1 = (char)-1;Character i2 = (char)-1;System.out.println("i1=i2\t" + (i1 == i2));i1 = (char)0;i2 = (char)0;System.out.println("i1=i2\t" + (i1 == i2));i1 = (char)127;i2 = (char)127;System.out.println("i1=i2\t" + (i1 == i2));i1 = (char)128;i2 = (char)128;System.out.println("i1=i2\t" + (i1 == i2));

输出结果:
i1=i2 false
i1=i2 true
i1=i2 true
i1=i2 false

Boolean

通过如下代码输出可以看出它也具有常量池。

Boolean i1 = true;Boolean i2 = true;System.out.println("i1=i2\t" + (i1 == i2));

输出结果:
i1=i2 true

Float,Double

Float和Double无常量池。

Float i1 = 127F;Float i2 = 127F;System.out.println("i1=i2\t" + (i1 == i2));Double i3 = 127D;Double i4 = 127D;System.out.println("i3=i4\t" + (i3 == i4));

输出结果:
i1=i2 false
i3=i4 false

String

引用文章:
https://tech.meituan.com/in_depth_understanding_string_intern.html
简单总结:可以通过使用双引号声明出来的String对象的方式和String.intern的方式在字符串常量池中生成对象。若字符串常量池中对象已存在,则无需重复生成对象。同时注意1.6和1.7的重要区别。

阅读全文
0 0