当前位置: 代码迷 >> Java相关 >> 关于“==”和equals的问题!
  详细解决方案

关于“==”和equals的问题!

热度:160   发布时间:2007-07-09 10:00:15.0
关于“==”和equals的问题!

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;
的结果会不一样呢?
请大家帮忙看看,谢谢!

搜索更多相关的解决方案: equals  

----------------解决方案--------------------------------------------------------
-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方法用于比较两个字符串的内容是否相同..

----------------解决方案--------------------------------------------------------
  相关解决方案