|
该用户从未签到
|
今天碰到有人咨询java的自动装箱和自动拆箱有关的问题,以及equal和==的区别,详情如下,以下的两组变量: Integer m = 128; Integer n = 128;& ]% S- k% y1 z# s* w
Integer a = 127; Integer b = 127;; z, Z) ]! J, P" C: f6 L, |! T
- m: k- D# c5 x; \( q' @
3 z0 w0 g5 H+ a5 ^m.equal(n) 以及a.equal(b)显然是结果是相等的 。equal比较的是两个对象的内容是否相等。 上面是JDK1.5的新特性,叫自动装包和拆包。
. o. V( c5 B$ Q/ _) d0 m所以上面自动封装成Integer对象。 它们两个对象的内容相同 所以显示相等
% u: X2 r" U! s! Y
- a: P$ P+ a7 W; k& r/ P但m==n的结果是不相等的。
" g4 P4 I7 P: w/ I1 X) W: H7 S==比较的是内存地址。i1,i2自动装包成Integer类,由于它们的内存地址是不同的,所以显示不相等。
/ K: _7 O" _, s4 K8 ]* @# T4 J( L" E' x2 p* d
但a==b 结果是相等的。显然比较的内容相等。
+ g# L& f0 ]& k1 s8 m
I8 d! J( [( g" ? R* i \为什么m==n 判断为false,但a==b 却判断为true呢,原因是什么?9 l: C2 g1 q2 L9 `# s
由于自动装包,它们其实都是装在一个Integer对象中。
& e8 {' {- Z# X这里就有特殊性质了。ava编译器在1.5版本中,对原型的自动装包是有一个规定的,对于boolean,byte相同的值放在同一个包装器对象中,' Y+ ?; h2 p) a2 f
char<=127的放在同一个包装对象中,short和int在-128到127之间的数据放在同一个包装对象中。
( `, n% k* H/ e; C% |1 y/ h# \ q5 I) e, x2 o3 T# m
|
|