该用户从未签到
|
今天碰到有人咨询java的自动装箱和自动拆箱有关的问题,以及equal和==的区别,详情如下,以下的两组变量: Integer m = 128; Integer n = 128;
% {- r( y; h! k. x4 |: q Integer a = 127; Integer b = 127;
7 w3 j/ s2 y7 v8 O- Q; W9 p$ U# u! V# r- D& L6 C4 G2 X
# C9 k* }+ F$ r4 U6 M6 `m.equal(n) 以及a.equal(b)显然是结果是相等的 。equal比较的是两个对象的内容是否相等。 上面是JDK1.5的新特性,叫自动装包和拆包。
- j6 c8 I% Q4 i, u* y所以上面自动封装成Integer对象。 它们两个对象的内容相同 所以显示相等( P) d6 s" z' i2 j3 B
: l0 K" i- a3 e& U) Q
但m==n的结果是不相等的。
& g6 a. A) s, G$ r3 ]9 b) Y==比较的是内存地址。i1,i2自动装包成Integer类,由于它们的内存地址是不同的,所以显示不相等。
4 j5 A8 R! ]* s4 u: {3 H7 K5 e9 r r7 L# m
但a==b 结果是相等的。显然比较的内容相等。
6 i& c& I A! h @$ Q g& {9 l: b1 R9 f& M. q/ c
为什么m==n 判断为false,但a==b 却判断为true呢,原因是什么?! a) H, G1 Q( N5 n9 N
由于自动装包,它们其实都是装在一个Integer对象中。
i( I0 M0 S# L# {7 h这里就有特殊性质了。ava编译器在1.5版本中,对原型的自动装包是有一个规定的,对于boolean,byte相同的值放在同一个包装器对象中,3 p4 B; y* W# I7 S2 V
char<=127的放在同一个包装对象中,short和int在-128到127之间的数据放在同一个包装对象中。* T J/ H8 t# Q$ g
, d$ E1 J2 s- |2 y |
|