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)) 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 |