当前位置: 代码迷 >> Java相关 >> equals的问题
  详细解决方案

equals的问题

热度:318   发布时间:2006-11-27 23:16:24.0
equals的问题
class Text
{
int i;
public static void main(String [] args)
{
Text one = new Text();
Text two = new Text();
one.i = two.i = 100;
System.out.println(one.equals(two));
}
}
这个所打印出来的值为什么是FALES而不是TRUE啊??
搜索更多相关的解决方案: equals  

----------------解决方案--------------------------------------------------------
因为未对两个对象进行初始化它们里面的内容是不确的。equals是比较两个对象里面的内容的所以返回false.
----------------解决方案--------------------------------------------------------
上面那个里面我不是写了one.i = two.i=100吗!
class Text
{
public static void main (String [] args)
{
Integer a = new Integer (47);
Integer b = new Integer (47);
System.out.println(a.equals(b));
}
}
那这个为什么是TRUE呢??都糊涂了!

[此贴子已经被作者于2006-11-27 23:57:37编辑过]


----------------解决方案--------------------------------------------------------
后面这个是比较的两个int的值

你那个是比较的one和two这两个对象,是在比较它们的地址...
改成one.i和two.i试试...
----------------解决方案--------------------------------------------------------
哦  是的哦!我把o1和o2都打印了出来他们果然不一样!呵呵!
----------------解决方案--------------------------------------------------------
..equals比较符其实在object中定义也是比较引用...要你自已定义的...
Integer a = new Integer (47);
Integer b = new Integer (47);
System.out.println(a.equals(b));
返回true是因为在Integer中这个类重写了这个方法...而上面返回false是因为你自已的类没有重写这个方法!!!
----------------解决方案--------------------------------------------------------

主要是因为你没有重写定义在Object类中的equals方法

所以你调用equals的时候,实际上调的是Object类中的equals方法,它默认的实现是比较两个对象的地址是不是一样


----------------解决方案--------------------------------------------------------


public class EqualsDemo{
public static void main (String [] args){
Integer a = new Integer (10);
Integer b = new Integer (10);
System.out.println("a.equals(b) = " + a.equals(b));
Number num1 = new Number();
Number num2 = new Number();
num1.i = num2.i = 30;
System.out.println("num1.equals(num2) = " + num1.equals(num2));
num1 = num2;
System.out.println("after num1 = num2");
System.out.println("num1.equals(num2) = " + num1.equals(num2));
}
}

class Number{
int i;
}

(1)大家可以看到结果,a.equals(b)的结果为true。
(2)当num1.i = num2.i = 30;后再进行num1.equals(num2)其结果为false
(3)当num1 = num2;后再进行num1.equals(num2)其结果为true。
为什么会这样呢?其原因就是我们并没有对Object的equals进行复写,而Object的equals方法是对对象的引用进行比较,(2)只代表其对象中的值是相同的,对象并不相同即其地址并不相同。而(3)其引用是相同的,是指向同一地址的。如果我们在num1 = num2后面加上一句:num1.i = 1;然后我们再System.out.println(“num2.i=”+ num2.i);时会发现其输出的结果是:1;就是这样的。
如果我们想让(2)的结果也输出true则需对equals方法进行复写,下面是在类Number中对equals方法进行复写
class Number{
int i;
public boolean equals(Object t){
if(this.i == ((Number)t).i)
return true;
else
return false;
}
}
这样就可以得到true的结果了。
下面是复写equals后得到的运行结果。

http://www.myj2ee.cn/


----------------解决方案--------------------------------------------------------

楼上解释不错.相当的好.有长知识了.有收获.


----------------解决方案--------------------------------------------------------
java是面向对象的语言,比较两个对象是否相同实际上就是比较这两个对象的地址是否相同么?

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