当前位置: 代码迷 >> J2SE >> 修改下 equals 方法 ,看看哪里错解决方案
  详细解决方案

修改下 equals 方法 ,看看哪里错解决方案

热度:54   发布时间:2016-04-24 12:27:08.0
修改下 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();
比较这俩个才可以嘛。
  相关解决方案