该用户从未签到
|
今天碰到有人咨询java的自动装箱和自动拆箱有关的问题,以及equal和==的区别,详情如下,以下的两组变量: Integer m = 128; Integer n = 128;* a& I+ O: ^% S; _" N o
Integer a = 127; Integer b = 127;
4 Q) y! I3 b9 b: v+ F2 ~- R; m- L- }+ n& E
5 S ?* B; h# k" `2 Q5 V& Im.equal(n) 以及a.equal(b)显然是结果是相等的 。equal比较的是两个对象的内容是否相等。 上面是JDK1.5的新特性,叫自动装包和拆包。5 Q% J: ~" w$ L! h
所以上面自动封装成Integer对象。 它们两个对象的内容相同 所以显示相等1 ]- Y& j! B5 ]# a3 \
5 k6 K7 E: |3 b) i( H) d. H( Y/ C$ W但m==n的结果是不相等的。
9 R% f6 h' U/ j7 g) R I+ t: @) Z==比较的是内存地址。i1,i2自动装包成Integer类,由于它们的内存地址是不同的,所以显示不相等。. a0 F% w/ \) x0 O. @' D% S3 U, d
- ~$ I" ~- Y2 ~
但a==b 结果是相等的。显然比较的内容相等。
' r3 @, j/ H- ^ ]& O$ I+ ], {2 p* U$ m2 C: q2 |' r
为什么m==n 判断为false,但a==b 却判断为true呢,原因是什么?
' I+ ^7 l2 A/ U) I由于自动装包,它们其实都是装在一个Integer对象中。: g4 ?6 M8 ^! ~( P0 h( d# N
这里就有特殊性质了。ava编译器在1.5版本中,对原型的自动装包是有一个规定的,对于boolean,byte相同的值放在同一个包装器对象中,
1 r8 x% u9 A9 Nchar<=127的放在同一个包装对象中,short和int在-128到127之间的数据放在同一个包装对象中。, O) F# C( j5 s
) k. w9 M) b. Y& r, F
|
|