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;明明对象里面属性一样???
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;明明对象里面属性一样???
return true ;
}if(obj instanceof Var){ //obj是Var2类的实例
Var other = (Var)obj ;
return this.s3==other.s3 ;
}
所以 返回的仍然还是false
哥哥,用脚趾头想问题去了啊,
字符串比较有用 == 的吗?????
当然,s3要判断是否为空
-->
return this.s3.equals(other.s3) ;遇到这种问题 ,我觉得应该用debug调试一下 ,或者 在程序中System.out.println() ;这样子就能定位问题出现在哪里 ,程序到了那里出现了问题
Var other = (Var)obj ;
return this.s3==other.s3 ;这里我已经强转了,为什么还比不了里面的内容
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";
}
System.out.println(var.equals(var2));//true
这里写错了
应该是
System.out.println(var.equals(var2));//false
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是不会为真的,也就是说,它下面的语句不会执行,所以,就算你强转了也没用,它压根未执行。
呵呵,给分吧,楼主!以后注意点吧
应该是Var var1 = new Var();
Var var2 = new Var();
比较这俩个才可以嘛。
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;}
}
楼主仔细看一下~
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";
}
这个说的挺好
你有70公斤,一只小猪有70公斤,你愿意跟它比吗??????????你和猪是永远不一样的呀