equals方法的问题?

_xiaolifeidao 2002-09-06 03:09:18
//: EqualsMethod2.java

class Value {
int i;
}

public class EqualsMethod2 {
public static void main(String[] args) {
Value v1 = new Value();
Value v2 = new Value();
v1.i = v2.i = 100;
System.out.println(v1.equals(v2));
}
} ///:~

哪位大侠解释一下输出结果?
...全文
42 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
beming 2002-09-06
  • 打赏
  • 举报
回复
有点明白,其实还不算明白,呵呵,慢慢体会算啦。多谢7(Nomad)的解答


------------------
====================================
没有风的日子,却是我毕业的时候??
湛江风好大,毕业之后离开了湛江,
怀念那----风

*************************************
7 2002-09-06
  • 打赏
  • 举报
回复
Primitive type的==是内容比较(Primitive type没有reference),相对应的Wrapper type要用equals()实现内容比较


如果我有说错之处,请指正,大家共同学习 : )
beming 2002-09-06
  • 打赏
  • 举报
回复
如果我没有重载equals,那么我想比较两个整型应该如何比较?

boolean bl = true;
if(bl == false)...

这是什么比较呢??

多谢7(Nomad)的解答!


------------------
====================================
没有风的日子,却是我毕业的时候??
湛江风好大,毕业之后离开了湛江,
怀念那----风

*************************************
7 2002-09-06
  • 打赏
  • 举报
回复
其实我们所用的是reference ,==用来比较两个reference是否指向同一个对象,null 就是没有指向任何对象(其实还是有的,一个特殊的,但无须更深了解)

Java.lang包中的Object类有public boolean equals (Object obj)方法。它比较两个对象是否相等。仅当被比较的两个引用指向同一对象时,对象的equals()方法返回true。

但很多类对这个equals()做了重载.当两个分离的对象的内容和类型相配的话,String,Date,File类和所有其它override equals()的包装类(Integer,Double,等等)将返回真。
这时,equals()就和==不一样了

try...


class Value {
int i;
}

public class EqualsMethod2 {
public static void main(String[] args) {
Value v1 = new Value();
Value v2 = new Value();
v1.i = v2.i= 100;
Integer j1,j2;
j1=new Integer(101);
j2=new Integer(101);
System.out.println(v1. equals(v2));
System.out.println(j1. equals(j2));
System.out.println(j1==j2);
}
}
beming 2002-09-06
  • 打赏
  • 举报
回复
不承认?什么意思呢?

但它确实是存在于java中啊,而且我经常用呢。可以说具体一点吗,多谢


------------------
====================================
没有风的日子,却是我毕业的时候??
湛江风好大,毕业之后离开了湛江,
怀念那----风

*************************************
7 2002-09-06
  • 打赏
  • 举报
回复
null是一个对象,一个java不承认的对象,呵呵........
beming 2002-09-06
  • 打赏
  • 举报
回复
String str = null;
if(str == null)....这样也可以判断,null是对象吗?
其实 == 两边应该是什么类型呢,equals比较是对象,那么 == 呢?是值还是对象,还是其他的呢?我知道字符串比较就一定要用equals不能用 == ,那么如果是两个整型应该用什么比较呢??
beming 2002-09-06
  • 打赏
  • 举报
回复
to 7(Nomad)

但系这样比较也可以啊:if(String str == null),其实null是一个对象吗??

如果用到==那么两边应该是什么类型呢??


------------------
====================================
没有风的日子,却是我毕业的时候??
湛江风好大,毕业之后离开了湛江,
怀念那----风

*************************************
_xiaolifeidao 2002-09-06
  • 打赏
  • 举报
回复
呵呵,我是java的初学者,觉得这方面比c++要复杂些,有谁可以解释清楚些吗?
分有的就是:)
7 2002-09-06
  • 打赏
  • 举报
回复
Java.lang包中的Object类有public boolean equals (Object obj)方法。它比较两个对象是否相等。仅当被比较的两个引用指向同一对象时,对象的equals()方法返回true。
==运算符也进行等值比较。也就是说,对于任何引用值X和Y,当且仅当X和Y指向同一对象时, X==Y返回真。
当两个分离的对象的内容和类型相配的话,String,Date,File类和所有其它override equals()的包装类(Integer,Double,等等)将返回真。

你的类没有包装equals(),因此依然是两个引用是否指向同一对象
beming 2002-09-06
  • 打赏
  • 举报
回复
我也想知道,有时候我都会混淆:equals和==的区别。
谁可以说说他们两者之间的区别呢?


------------------
====================================
没有风的日子,却是我毕业的时候??
湛江风好大,毕业之后离开了湛江,
怀念那----风

*************************************
_xiaolifeidao 2002-09-06
  • 打赏
  • 举报
回复
public class EqualsMethod {
public static void main(String[] args) {
Integer n1 = new Integer(47);
Integer n2 = new Integer(47);
System.out.println(n1.equals(n2));
}
} ///:~

这个又输出什么呢?
远太狼 2002-09-06
  • 打赏
  • 举报
回复
输出为false

因为Value没有重写Object的equals方法
Object的equals是这样写的:
return this == obj;
就是判断引用是否相等,所以 v1和v2的引用当然不相等了,false
namowen 2002-09-06
  • 打赏
  • 举报
回复
你所调用的equals()方法实际上是Value的父类Object中的方法,只有在这两个句柄指向同一个对象时,才返回true。v1和v2指向两个对象,所以返回false。
The equals method for class Object implements the most discriminating possible equivalence relation on objects; that is, for any reference values x and y, this method returns true if and only if x and y refer to the same object (x==y has the value true).
你可以重载equals()方法,这样就可以返回true了:
class Value {
int i;
boolean equals(Value v){
if(v.i == this.i) return true;
else return false;
}
}

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧