String s1=new String("haha");
String s2=new String("haha");
//发现s1==s2为假,s1.equals(s2)为真,很合适,但是:public class Egg
{
public int m=4;
}Egg e1=new Egg();
Egg e2=new Egg();//e1==e2和e1.equals(e2)都为假,为什么?----------------
请不明白的人不要乱回答,以免那些懂的人发现这不是新贴于是不进来了……
String s2=new String("haha");
//发现s1==s2为假,s1.equals(s2)为真,很合适,但是:public class Egg
{
public int m=4;
}Egg e1=new Egg();
Egg e2=new Egg();//e1==e2和e1.equals(e2)都为假,为什么?----------------
请不明白的人不要乱回答,以免那些懂的人发现这不是新贴于是不进来了……
解决方案 »
- scjp中的一道题
- 在线急等 java swing 中的实时流量监控问题
- eclipse中怎样过滤掉所用的warning?
- 有谁知道淘宝的url是如何实现的?
- 我用myeclipse开发一个程序,用的了oracle驱动,请问我发布后如何注册驱动才能找到
- getArray()怎么用?
- 如何在windows me中配置java环境
- java 数据类型
- 如何在一个web项目中实现登陆时用ssl访问,而登陆后用普通的http协议访问呢,就想hotmail那样,不同的是用java实现?
- .pdm用什么工具打开?
- 【300分求教】请问远程登陆本地FTP server的问题
- Java Applet小应用程序,用IE无法查看html文件,求帮助
所有的类都继承Object这个类,你的Egg也不例外。因此你的Egg继承了Object的equals方法。而你没有重写此方法,所以,e1.equals(e2)其实是调用了Object的equals方法。下面,让你看看Object的eqauls方法是如何实现的?
下面的代码,是从Java源代码中提取的:public boolean equals(Object obj) {
return (this == obj);
}这代码实在简洁,看出问题没?this是调用equals方法的对象,obj是待比较对象。而Object的equals方法是用==比较的,即比较它们的地址。你的e1,e2的地址当然不同啦。
显示,你是想比较它们的成员m,所以,就自己重写equals吧
{
public int num;
public MyObject(int num){
this.num=num;
}
public boolean equals(Object obj){
return this.num==((MyObject)obj).num;
}
}
public class NewClass {
public static void main(String args[]) throws Exception{
MyObject o1=new MyObject(1);
MyObject o2=new MyObject(1);
MyObject o3=new MyObject(2);
System.out.println(o1.equals(o2));
System.out.println(o1.equals(o3));
}
}