Byte,Short,Integer,Long
通過如下代碼輸出可以看出常量池?cái)?shù)值范圍為-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));
輸出結(jié)果:
i1=i2 false
i1=i2 true
i1=i2 true
i1=i2 false
Character
通過如下代碼輸出可以看出常量池?cái)?shù)值范圍為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));
輸出結(jié)果:
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));
輸出結(jié)果:
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));
輸出結(jié)果:
i1=i2 false
i3=i4 false
String
引用文章:
https://tech.meituan.com/in_depth_understanding_string_intern.html
簡單總結(jié):可以通過使用雙引號聲明出來的String對象的方式和String.intern的方式在字符串常量池中生成對象。若字符串常量池中對象已存在,則無需重復(fù)生成對象。同時(shí)注意1.6和1.7的重要區(qū)別。