Topic: 关于equals()方法的一个疑惑

  Print this page

1.关于equals()方法的一个疑惑 Copy to clipboard
Posted by: liumiaowilson
Posted on: 2005-10-12 18:07

[color=blue][/color]
菜鸟我有疑问啦!希望大家能帮我解决......
看下面源代码:
class Value
{
int i;
}
public class Equals
{
public static void main(String [] args)
{
Value v1=new Value();
Value v2=new Value();
v1.i=10;
v2.i=10;
Susyem.out.println(v1.equals(v2));
}
}
为什么输出是false?

2.Re:关于equals()方法的一个疑惑 [Re: liumiaowilson] Copy to clipboard
Posted by: zcjl
Posted on: 2005-10-12 20:45

因为你的Value类没有实现equals方法,于是就继承了Object类的默认实现,而那里面就是直接使用==来进行比较的,v1和v2显然不是指向同一个对象,于是结果为false

3.Re:关于equals()方法的一个疑惑 [Re: liumiaowilson] Copy to clipboard
Posted by: duguhong14
Posted on: 2005-10-13 07:18

每个类都有继承自Object类的equals方法,而这个方法的原型中,对内容不加以判断。所以,如果需要用到某个类的equals方法时,要自己创建新的equals覆盖掉原来从Object继承来的equals方法。你上面的程序我改了。运行通过,结果为true
(顺便讲一句,你这个贴子中最后一句的“system”写错了,要保持严谨的态哦)
class Value
{
public int i;
public void Value(int data)
{
i=data;  
}
public boolean equals(Object obj)
{
if(obj!=null&&(obj instanceof Value))
  if(this.i==((Value)obj).i)
    return true;
return false;  
}
}
public class Equals
{
public static void main(String [] args)
{
Value v1=new Value();
Value v2=new Value();
v1.i=10;
v2.i=10;
System.out.println(v1.equals(v2));
}
}

4.Re:关于equals()方法的一个疑惑 [Re: liumiaowilson] Copy to clipboard
Posted by: q_yuan
Posted on: 2005-10-13 10:15

That the man on it said is very right,you write the class and you should implement the method,that you can use it in another class!

5.Re:关于equals()方法的一个疑惑 [Re: liumiaowilson] Copy to clipboard
Posted by: liumiaowilson
Posted on: 2005-10-15 11:04

多谢啦!

6.Re:关于equals()方法的一个疑惑 [Re: liumiaowilson] Copy to clipboard
Posted by: rhvic
Posted on: 2005-10-15 23:46

我想问一下,这里:(图中红色部分)
class Value
{
public int i;
public void Value(int data)
{
i=data;
}
public boolean equals(Object obj)
{
if(obj!=null&&(obj instanceof Value))
if(this.i==((Value)obj).i) 这里既然前面的if已经有obj instanceof Value这个条件了,那么还需要用(Value)进行强制转换吗
return true;
return false;
}
}
public class Equals
{
public static void main(String [] args)
{
Value v1=new Value();
Value v2=new Value();
v1.i=10;
v2.i=10;
System.out.println(v1.equals(v2));
}
}

7.Re:关于equals()方法的一个疑惑 [Re: liumiaowilson] Copy to clipboard
Posted by: hamlet
Posted on: 2005-10-16 15:38

期待中

8.Re:关于equals()方法的一个疑惑 [Re: liumiaowilson] Copy to clipboard
Posted by: xiaoxujsj
Posted on: 2005-10-16 20:56

期待中

9.Re:关于equals()方法的一个疑惑 [Re: xiaoxujsj] Copy to clipboard
Posted by: zcjl
Posted on: 2005-10-16 22:20

if(obj!=null&&(obj instanceof Value))
if(this.i==((Value)obj).i) 这里既然前面的if已经有obj instanceof Value这个条件了,那么还需要用(Value)进行强制转换吗


obj instanceof Value为true只是保证obj强制转型为Value类型不会失败,但此时obj仍然是Object的实例,不具有i这个field,只有强制转型为Value后才能访问到i的

10.Re:关于equals()方法的一个疑惑 [Re: liumiaowilson] Copy to clipboard
Posted by: rhvic
Posted on: 2005-10-17 11:40

I got it!


   Powered by Jute Powerful Forum® Version Jute 1.5.6 Ent
Copyright © 2002-2021 Cjsdn Team. All Righits Reserved. 闽ICP备05005120号-1
客服电话 18559299278    客服信箱 714923@qq.com    客服QQ 714923