看到一位同学的帖子里问到Integer定义时候的范围,自己就写了
Integer x = 200;
Integer y = x;
System.out.println((x==y));
结果为ture
改成Integer x = 200;
Integer y = x;
x++;
y++;
System.out.println((x==y));
后结果就为false.
而Integer x = 20;
Integer y = x;
x++;
y++;
System.out.println((x==y));
就为ture.
这是因为在Integer原始数据类型的范围只有-128~127,当超出这个范围的时候就会转换成引用类型。
原始数据类型中x,y是处于同一个常量池中,所以返回为ture。
在引用类型中也就是拆了Integer箱,然后x++指向一个新的地址,y也同样,然后再装箱,所以返回为ture。
当x和y都不自加的时候,由于y=x,所以他们指向的是同一个常量地址,所以返回ture。
这样理解不知道对不对。 |
|