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();
比较这俩个才可以嘛。