该用户从未签到
|
今天碰到有人咨询java的自动装箱和自动拆箱有关的问题,以及equal和==的区别,详情如下,以下的两组变量: Integer m = 128; Integer n = 128;6 j& I" O/ I! y: Z& k6 n. R& t
Integer a = 127; Integer b = 127;1 W! w& e( D7 ]5 |& [& a, A4 g6 [
! {# R: Q. w0 u) e
4 z/ F& B3 ~# V- W+ Z3 um.equal(n) 以及a.equal(b)显然是结果是相等的 。equal比较的是两个对象的内容是否相等。 上面是JDK1.5的新特性,叫自动装包和拆包。
, H- e, D$ L+ _4 R& L2 V所以上面自动封装成Integer对象。 它们两个对象的内容相同 所以显示相等: V8 h+ }! |( }; Z
$ k/ ~7 G9 H( t( U+ E7 K但m==n的结果是不相等的。
! c, a* ~" t5 S0 }- R% s" k/ t==比较的是内存地址。i1,i2自动装包成Integer类,由于它们的内存地址是不同的,所以显示不相等。# a9 h+ r" j' O- j! S* P8 S
8 ~$ f) {6 }- f4 \- [, E2 Z) [
但a==b 结果是相等的。显然比较的内容相等。
. ~0 y1 ^8 ]8 h
) O0 E! Q# g; [$ `6 [为什么m==n 判断为false,但a==b 却判断为true呢,原因是什么?
2 H* e( a: v/ @由于自动装包,它们其实都是装在一个Integer对象中。3 i1 _) Y& b# L+ m( G
这里就有特殊性质了。ava编译器在1.5版本中,对原型的自动装包是有一个规定的,对于boolean,byte相同的值放在同一个包装器对象中,; P; E( {, [( V* F5 W" z
char<=127的放在同一个包装对象中,short和int在-128到127之间的数据放在同一个包装对象中。; w2 W- b k' d T- r: x2 N
4 ]. l- |4 i" x |
|