科帮网

登录/注册
您现在的位置:论坛 盖世程序员(我猜到了开头 却没有猜到结局) 盖世程序员 > java的自动装箱和自动拆箱有关的问题,以及equal和==的 ...
总共48087条微博

动态微博

查看: 1270|回复: 0

java的自动装箱和自动拆箱有关的问题,以及equal和==的区别

[复制链接]

326

主题

72

听众

999

金钱

实习版主

该用户从未签到

优秀版主

跳转到指定楼层
楼主
发表于 2014-06-13 23:04:36 |只看该作者 |倒序浏览
今天碰到有人咨询java的自动装箱和自动拆箱有关的问题,以及equal和==的区别,详情如下,以下的两组变量:   Integer m = 128; Integer n = 128;
9 a6 Z% N( x) M* t6 O   Integer a = 127; Integer b = 127;
3 w/ T4 ]. O1 r  e! H
' `% x( p1 s5 l5 q3 b7 G- A) l* f9 i
" o+ Q/ w5 }7 P; v! L* Q0 E) Mm.equal(n) 以及a.equal(b)显然是结果是相等的 。equal比较的是两个对象的内容是否相等。 上面是JDK1.5的新特性,叫自动装包和拆包。" @( C* e2 v9 k3 b0 G) \
所以上面自动封装成Integer对象。 它们两个对象的内容相同 所以显示相等
* N; {1 r; k: E5 o3 W8 m0 e8 Y" ?/ m0 Y& d3 A* ~+ A
但m==n的结果是不相等的。# ^1 R+ @1 _. J) X
==比较的是内存地址。i1,i2自动装包成Integer类,由于它们的内存地址是不同的,所以显示不相等。
& D' h1 C5 g9 T2 A# N$ t6 ~7 W. j. s: F5 {
但a==b 结果是相等的。显然比较的内容相等。" o1 ~% ?7 B" h! I6 ~9 ~3 C
/ F% _8 b' ^; F. w; v
为什么m==n 判断为false,但a==b 却判断为true呢,原因是什么?2 }2 }2 e1 f. E& Z( s
由于自动装包,它们其实都是装在一个Integer对象中。0 Q9 @9 x% W; A6 U7 J# c" [4 p0 t
这里就有特殊性质了。ava编译器在1.5版本中,对原型的自动装包是有一个规定的,对于boolean,byte相同的值放在同一个包装器对象中,/ H+ R+ L5 H6 v7 X4 H; v! R
char<=127的放在同一个包装对象中,short和int在-128到127之间的数据放在同一个包装对象中。2 U, W& g; a$ @/ B! p- U7 W
, T8 R, j# b8 J6 o- \& h+ Z

科帮网 1、本主题所有言论和图片纯属会员个人意见,与本社区立场无关
2、本站所有主题由该帖子作者发表,该帖子作者与科帮网享有帖子相关版权
3、其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和科帮网的同意
4、帖子作者须承担一切因本文发表而直接或间接导致的民事或刑事法律责任
5、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责
6、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
7、科帮网管理员和版主有权不事先通知发贴者而删除本文


JAVA爱好者①群:JAVA爱好者① JAVA爱好者②群:JAVA爱好者② JAVA爱好者③ : JAVA爱好者③

快速回复
您需要登录后才可以回帖 登录 | 立即注册

   

关闭

站长推荐上一条 /1 下一条

发布主题 快速回复 返回列表 联系我们 官方QQ群 科帮网手机客户端
快速回复 返回顶部 返回列表