package EqualsDemo;public class Equals extends Object {
public static void main(String []args){
String s1 = "abc" ;
String s2 = "abc" ;

int s3 = 10 ;
int s4 = 10 ;

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



Var var = new Var();
Var2 var2 = new Var2();
System.out.println(var.equals(var2));
}

}


class Var { String s3 = "ssss";
public boolean equals(Object obj){
if(obj==null){
return false;
}
if(this==obj){
return true ;
}
if(obj instanceof Var){
Var other = (Var)obj ;
return this.s3==other.s3 ;
}
return false ;
}

}class Var2{
String s3 ="ssss" ;
}
//===========================================
为什么我equals任然返回false;明明对象里面属性一样???

解决方案 »

  1.   

    if(this==obj){ //this 是Var类 而 obj是Var2类
    return true ;
    }if(obj instanceof Var){ //obj是Var2类的实例
    Var other = (Var)obj ;
    return this.s3==other.s3 ;
    }
    所以 返回的仍然还是false
      

  2.   

    return this.s3==other.s3 ;
    哥哥,用脚趾头想问题去了啊,
    字符串比较有用 == 的吗?????
      

  3.   

    改成 this.s3.equals(other.s3)
    当然,s3要判断是否为空
      

  4.   

    return this.s3==other.s3 ;
    -->
    return this.s3.equals(other.s3) ;遇到这种问题 ,我觉得应该用debug调试一下 ,或者 在程序中System.out.println() ;这样子就能定位问题出现在哪里 ,程序到了那里出现了问题
      

  5.   

    我的意思是,如何比较对象里面的内容,
    Var other = (Var)obj ;
    return this.s3==other.s3 ;这里我已经强转了,为什么还比不了里面的内容
      

  6.   

    ///////////////////////////////////////equals///////////////////////////////////////public class Equals extends Object {
        public static void main(String[] args) {
    String s1 = "abc";
    String s2 = "abc";
    //equals对于值类型     比较的是两个变量的值是否相同,即栈中的内容是否相同。 int s3 = 10;
    int s4 = 10;
    System.out.println(s1 == s2); Var var = new Var();
    Var2 var2 = new Var2();
    //equals对于引用类型   比较的是两个对象的内容是否相同,即堆中的内容是否相同。(无论你是否重写了equals)
    //下面的var.s3和var2.s3是相同的类型,都是字符串类型,而且字符串缓冲池中的内容是相同的
    System.out.println(var.s3.equals(var2.s3));//true
    //下面的var和var2是不同的类型,它们两个都不是字符串类型,一个是var类型,一个是var2类型。
    //类型已经不同了。堆中的内容肯定不一样
    System.out.println(var.equals(var2));//true
        }}class Var {    String s3 = "ssss";    public boolean equals(Object obj) {
    if (obj == null) {
        return false;
    }
    if (this == obj) {
        return true;
    }
    if (obj instanceof Var) {
        Var other = (Var) obj;
        return this.s3 == other.s3;
    }
    return false;
        }}class Var2 {
        String s3 = "ssss";
    }
      

  7.   


       System.out.println(var.equals(var2));//true
    这里写错了
    应该是
       System.out.println(var.equals(var2));//false
      

  8.   

    楼主,知道你哪错了,
    public boolean equals(Object obj) {
    if (obj == null) {
    return false;
    }
    if (this == obj) {
    return true;
    }
    if (obj instanceof Var) {
    System.out.println("test");
    Var other = (Var) obj;
    return (this.s3).equals(other.s3) ;
    }else{
    System.out.println("test2");
    return false;}
    }
    这段是我在eclipse里测试用的代码。你的最后一个if判断结果为false,所以它会直接进入else返回false,除非你让Var2继承了Var,否则表达式obj instanceof Var是不会为真的,也就是说,它下面的语句不会执行,所以,就算你强转了也没用,它压根未执行。
    呵呵,给分吧,楼主!以后注意点吧
      

  9.   

    楼主立即有错误,Var 和 Var2是不同的类。怎么可以让他们生成的对象相等呢,
    应该是Var var1 = new Var();
    Var var2 = new Var();
    比较这俩个才可以嘛。
      

  10.   


    if (obj instanceof Var) { //这里不为true
    System.out.println("test");
    Var other = (Var) obj; //所以不会执行这里的语句 
    return (this.s3).equals(other.s3) ;
    }else{
    System.out.println("test2");
    return false;}
    }
    楼主仔细看一下~
      

  11.   

    方法里面用 “==” 了。你要把方法里面的“==” 也改成equal。==  是用来判断是否为同一内存地址
      

  12.   

    Java code///////////////////////////////////////equals///////////////////////////////////////public class Equals extends Object {
        public static void main(String[] args) {
        String s1 = "abc";
        String s2 = "abc";
    //equals对于值类型     比较的是两个变量的值是否相同,即栈中的内容是否相同。    int s3 = 10;
        int s4 = 10;
        System.out.println(s1 == s2);    Var var = new Var();
        Var2 var2 = new Var2();
    //equals对于引用类型   比较的是两个对象的内容是否相同,即堆中的内容是否相同。(无论你是否重写了equals)    
        //下面的var.s3和var2.s3是相同的类型,都是字符串类型,而且字符串缓冲池中的内容是相同的    
        System.out.println(var.s3.equals(var2.s3));//true
        //下面的var和var2是不同的类型,它们两个都不是字符串类型,一个是var类型,一个是var2类型。
        //类型已经不同了。堆中的内容肯定不一样
        System.out.println(var.equals(var2));//true
        }}class Var {    String s3 = "ssss";    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (this == obj) {
            return true;
        }
        if (obj instanceof Var) {
            Var other = (Var) obj;
            return this.s3 == other.s3;
        }
        return false;
        }}class Var2 {
        String s3 = "ssss";
    }
     
    这个说的挺好
      

  13.   

    var  var2类型已经不同了。堆中的内容肯定不一样 ,== 当然返回false这个怎么理解呢
    你有70公斤,一只小猪有70公斤,你愿意跟它比吗??????????你和猪是永远不一样的呀