public class MyClass{
private String name;
private int num; public MyClass(String string, int i) {
this.name=name;
this.num=num;
}
public static void main(String args[]){
MyClass s1=new MyClass("tom",10);
MyClass s2=new MyClass("tom",10);

String st1=new String("hello!");
String st2=new String("hello!");

System.out.println(s1 == s2);            
System.out.println(s1.equals(s2)); 
System.out.println(); 

System.out.println(st1 == st2);            
System.out.println(st1.equals(st2));      
 
}

运行结果:
false
falsefalse
true同样是equals
第一个类实例化的两个对象的equals 的值就为flase
第二个的两个对象的equals 的值就为true.求解。。

解决方案 »

  1.   

    String的equals方法是重写了的,内容相同就是true
    你的MyClass没有重写equals方法,所以调用的了是Object类的equals方法
    Obejct的equals只有同一个对象的时候才会是true;Object o = new Object();o.equals(o)这才能是true;
      

  2.   

    貌似String的equals方法已经被重写了,所以比较的结果就是true?我不太清楚,答错勿怪 
      

  3.   

    你可以重写你的equals()public boolean equals(Object o)
    {
      if(o instanceof MyClass)
       {
           MyClass temp = (MyClass)o;
           return (temp.name.equals(this.name) && temp.id==this.id);
     
       }else
       {
         return false;
       }
    }
      

  4.   

    可以看看String类的源代码String类本身已经重写了 equals() 方法,重写的equals方法所做的就是比较内容,而不是引用而你写的MyClass类,是你自己的类,如果你自己不在该类里重写equals方法,那么它用的是Object类里的方法,Object的最原始的equals方法和“==”效果一样的所以我们经常看到书上的String里的equals方法,都不是最原始的equals方法,如果你也想让你自己定义的类用equals方法时仅比较内容的话,就需要自己重写equals方法(最后把hashcode也同时覆写)
      

  5.   

    关于equals()和==的区别,csdn已经说过很多了.
    参考:http://topic.csdn.net/u/20110303/10/95e2119a-1124-4b84-a890-928fb997be2f.html
      

  6.   

    因为String类重写Object的equals和hashCode方法
    你没有重写所以就会用Object类的equals方法来比较
      

  7.   

    Object的equals方法 public boolean equals(Object obj) {
    return (this == obj);
        }