标题:equals的问题
只看楼主
lgdcky
Rank: 2
等 级:论坛游民
威 望:5
帖 子:576
专家分:18
注 册:2006-8-5
结帖率:33.33%
 问题点数:0 回复次数:10 
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 
2006-11-27 23:16
不羁的风
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2006-10-11
得分:0 
因为未对两个对象进行初始化它们里面的内容是不确的。equals是比较两个对象里面的内容的所以返回false.

2006-11-27 23:51
lgdcky
Rank: 2
等 级:论坛游民
威 望:5
帖 子:576
专家分:18
注 册:2006-8-5
得分:0 
上面那个里面我不是写了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编辑过]


2006-11-27 23:56
天字第一耗
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2006-11-27
得分:0 
后面这个是比较的两个int的值

你那个是比较的one和two这两个对象,是在比较它们的地址...
改成one.i和two.i试试...

2006-11-28 00:13
lgdcky
Rank: 2
等 级:论坛游民
威 望:5
帖 子:576
专家分:18
注 册:2006-8-5
得分:0 
哦  是的哦!我把o1和o2都打印了出来他们果然不一样!呵呵!

2006-11-28 00:56
しΟν∈→鱈
Rank: 1
等 级:新手上路
威 望:2
帖 子:369
专家分:0
注 册:2006-10-25
得分:0 
..equals比较符其实在object中定义也是比较引用...要你自已定义的...
Integer a = new Integer (47);
Integer b = new Integer (47);
System.out.println(a.equals(b));
返回true是因为在Integer中这个类重写了这个方法...而上面返回false是因为你自已的类没有重写这个方法!!!

开开心心的过&玩每一天!!!!
2006-11-28 09:14
千里冰封
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:灌水之王
等 级:版主
威 望:155
帖 子:28477
专家分:59
注 册:2006-2-26
得分:0 

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

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


可惜不是你,陪我到最后
2006-11-28 09:17
zzgem_box
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2007-1-13
得分:0 


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/

2007-01-13 01:34
wuzhong
Rank: 1
等 级:新手上路
帖 子:233
专家分:0
注 册:2006-10-23
得分:0 

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


2007-01-13 13:49
xiyangyu
Rank: 1
等 级:新手上路
帖 子:142
专家分:0
注 册:2006-8-31
得分:0 
java是面向对象的语言,比较两个对象是否相同实际上就是比较这两个对象的地址是否相同么?

天行健,君子以自强不息;地势坤,君子以厚德载物。
2007-01-13 15:57



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-105788-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.141128 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved