public class EqualTest {
public static void main(String[] args) {
Integer i1 = 1000;
Integer i2 = 1000;
if(i1 == i2)
{System.out.println("Same objects");}
if(i1!=i2)
{System.out.println("Different Objects");}
if(i1.equals(i2))
{System.out.println("meaningfully equal");}
Integer i3 = 10;
Integer i4 = 10;
if(i3 == i4)
{System.out.println("same object");}
if(i3 != i4)
{System.out.println("Different object");}
if(i3.equals(i4))
{System.out.println("meaningfully equal");}
}
}
输出的结果是:
Different Objects
meaningfully equal
same object
meaningfully equal
结果让我感觉不是太理解,为什么上面
Integer i1 = 1000;
Integer i2 = 1000;
而下面
Integer i3 = 10;
Integer i4 = 10;
的结果会不一样呢?
请大家帮忙看看,谢谢!
----------------解决方案--------------------------------------------------------
-128到127之间的Integer会有一个缓存,所有的都指向一个对象
不在这个范围之内的就不会了
你看看Integer的源码就知道了
----------------解决方案--------------------------------------------------------
==和equals确实不太一样!!具体区别也不是很清楚!!
----------------解决方案--------------------------------------------------------
老千说太深奥了。。。
不过没有他的也解释不了。。。
我可以解释的是“==”比较的是对象是否相同,同一个对象才相等。
equals比较的是值,这个对象的属性,可以是对象。TEXT等。。。
----------------解决方案--------------------------------------------------------
==比较的是地址
equals比较的是字符串内容
----------------解决方案--------------------------------------------------------
楼上位先生说的是。
----------------解决方案--------------------------------------------------------
public static Integer valueOf(int i) {
final int offset = 128;
if (i >= -128 && i <= 127) { // must cache
return IntegerCache.cache[i + offset];
}
return new Integer(i);
}
----------------解决方案--------------------------------------------------------
原来是由于Integer的缓存导致的,不错,谢谢诸位!
----------------解决方案--------------------------------------------------------
接着出一道题,帮大家理解一下这两者的区别:
有下面的代码片断:
Float s=new Float(0.9F)
Float t=new Float(0.9F)
Double u=new Double(0.9)
那么下面哪些表达式的结果是true呢?
A. s==t
B. s.equals(t)
C. s==u
D. t.equals(u)
大家可以试着做一下,呵呵,答案稍后公布。
[此贴子已经被作者于2007-7-10 10:03:11编辑过]
----------------解决方案--------------------------------------------------------
5楼说的有点不完善..
equals 是Object中的一个方法,但是此方法在String 类中被重写.
重写后的equals方法用于比较两个字符串的内容是否相同..
----------------解决方案--------------------------------------------------------