Integer的127与128

来源:互联网 发布:2016淘宝卖什么好 编辑:程序博客网 时间:2024/06/13 00:38
<span style="font-family: 微软雅黑, Verdana, sans-serif, 宋体; font-size: 14px; background-color: rgb(241, 248, 240);">JVM会自动维护八种基本类型的常量池,int常量池中初始化</span><span style="padding: 0px; margin: 0px; font-family: 微软雅黑, Verdana, sans-serif, 宋体; font-size: 14px;">-128~127的范围,所以当为Integer i=127时,在自动装箱过程中是取自常量池中的数值,而当<span style="padding: 0px; margin: 0px;">Integer i=</span>128时,128不在常量池范围内,所以<span style="padding: 0px; margin: 0px;">在自动装箱过程中</span>需new 128,所以地址不一样。</span>
public class Test {public static void main(String[] args) {Integer i1 = new Integer(1);Integer i2 = new Integer(1);System.out.println(i1 == i2);//falseInteger i3 = 127;Integer i4 = 127;System.out.println(i3 == i4);//trueInteger i5 = 128;Integer i6 = 128;System.out.println(i5 == i6);//falseint i7 = 128;int i8 = 128;System.out.println(i7 == i8);//true}}

对于较小数值的整型,在处理自动装箱的时候,采用常量池里面的值以节省内存,而大数值则是重新new出来的。这里刚好是分界线。


//Boolean类也实现了常量池技术Boolean bool1=true;Boolean bool2=true;System.out.println(bool1==bool2); //输出true//浮点类型的包装类没有实现常量池技术Double d1=1.0;Double d2=1.0;System.out.println(d1==d2); //输出false


0 0
原创粉丝点击