|
该用户从未签到
|
今天碰到有人咨询java的自动装箱和自动拆箱有关的问题,以及equal和==的区别,详情如下,以下的两组变量: Integer m = 128; Integer n = 128;
; Q: S" r4 r6 m+ B5 q Integer a = 127; Integer b = 127;7 p- p% a8 w$ I
- b3 J" v. ~9 K3 P5 U% M
$ u) X9 j, W* w9 m" r+ |! jm.equal(n) 以及a.equal(b)显然是结果是相等的 。equal比较的是两个对象的内容是否相等。 上面是JDK1.5的新特性,叫自动装包和拆包。
7 ~6 h- @, h' k! B3 _- o6 e& U所以上面自动封装成Integer对象。 它们两个对象的内容相同 所以显示相等# I. v4 N4 I7 a4 c9 ]0 Q% [8 T
' j% A& q* m' P: w8 }* _0 T+ A
但m==n的结果是不相等的。* v3 b" Y2 N6 x2 Y' H) Z: n' {
==比较的是内存地址。i1,i2自动装包成Integer类,由于它们的内存地址是不同的,所以显示不相等。. q) @7 h: J' Q
- @" r. J+ N; ^
但a==b 结果是相等的。显然比较的内容相等。
3 a5 m+ N5 J3 |3 ~2 ^
. f% |% Q4 E7 x, d2 n( {为什么m==n 判断为false,但a==b 却判断为true呢,原因是什么?
- k2 v$ e/ H$ _ L由于自动装包,它们其实都是装在一个Integer对象中。: P$ z- r8 c1 c" ]
这里就有特殊性质了。ava编译器在1.5版本中,对原型的自动装包是有一个规定的,对于boolean,byte相同的值放在同一个包装器对象中,
! J; H V4 G! k8 `) b% y! Achar<=127的放在同一个包装对象中,short和int在-128到127之间的数据放在同一个包装对象中。/ y5 g& l% _% {8 t3 K6 f; k; f
( k, z) `7 k. K" Y
|
|