A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

看到一位同学的帖子里问到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。
这样理解不知道对不对。

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马