|
该用户从未签到
|
今天碰到有人咨询java的自动装箱和自动拆箱有关的问题,以及equal和==的区别,详情如下,以下的两组变量: Integer m = 128; Integer n = 128;
4 G0 Y3 N! a; {2 r9 a7 J Integer a = 127; Integer b = 127;" h6 |" n0 Z- Y
/ p. A5 [" S( v- r4 z
1 ^" ~5 T z5 ]# w& om.equal(n) 以及a.equal(b)显然是结果是相等的 。equal比较的是两个对象的内容是否相等。 上面是JDK1.5的新特性,叫自动装包和拆包。
1 E% I- G2 v( K/ [0 _* [2 t所以上面自动封装成Integer对象。 它们两个对象的内容相同 所以显示相等2 X( o. e1 e3 S
5 E$ o2 [# f7 m0 ?# O8 j但m==n的结果是不相等的。9 y Y+ U; ?) d2 ^( v
==比较的是内存地址。i1,i2自动装包成Integer类,由于它们的内存地址是不同的,所以显示不相等。4 q, |6 C0 [7 h. e3 r7 N& F
1 f @# v! a& m! H' _* N但a==b 结果是相等的。显然比较的内容相等。
$ X- b; L5 ` L* {, n' X9 Q4 u# B" S! U' W5 F
为什么m==n 判断为false,但a==b 却判断为true呢,原因是什么?/ R, \: J" ~$ T+ N- F
由于自动装包,它们其实都是装在一个Integer对象中。
) H* _6 I/ |8 R7 a8 y8 l* T; R% ~这里就有特殊性质了。ava编译器在1.5版本中,对原型的自动装包是有一个规定的,对于boolean,byte相同的值放在同一个包装器对象中,5 z7 [& c: P) L% b( p& U2 D
char<=127的放在同一个包装对象中,short和int在-128到127之间的数据放在同一个包装对象中。( b2 a: B7 R# x! F3 ~% \9 j
]# h0 d) k, b8 `4 { |
|