日期:2014-05-20  浏览次数:20822 次

修改下 equals 方法 ,看看哪里错
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;明明对象里面属性一样???


------解决方案--------------------
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";
}

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