public class Cla5_1 {
public static void main(String[] args) {
Cloth c1=new Cloth();
Cloth c2=new Cloth();
c1.status="abc";
c2.status="abc";
System.out.println(c1.equals(c2));//输出false
}
}
class Cloth{
public String status;
}
这里的equals是判断对象对象指向地址是否一样, 如果要比较对象实体里面的内容一样, 需要重写equals方法, 这里使用的equals和String里面的equals不一样
String里面的equals是重写过的,比较的是内容,你的Cloth类里面需要自己重写equals
因为你new了两次,所以不相同,不过c1.status和c2.status相等,具体原因的话,需要好好理解对象和string类。
对于非字符串变量,equals比较的内存的首地址,这时候和==是一样的,即比较两边指向的是不是同一个对象
你这不是比较的字符串,是比较的两个Cloth对象,而这两个对象都是new的,引用地址肯定不相同,所以是false。 c1.status.equals(c2.status)才是比较字符串的引用
你这是比较的两个对象的地址,不是cloth中的status
因为 C1和C2指向的内存地址不一样 所有不相等,要明白引用类型的原理
c1和c2的地址不一样啊,你比较当然是false了,new出来的事新地址
equals比较的是地址,==比较的是内容
equals是object类的方法,所有没有重写这个方法的类中的这个方法比较的都是地址,也就是和'=='是一样的,重写过这个方法的类就按照重写的方法来比较,比如String类就重写了这个方法,比较的是内容
public class TestOne {
public static void main(String args[]) {
Cloth c1 = new Cloth();
Cloth c2 = new Cloth();
c1.sta = "abc";
c2.sta = "abc";
System.out.println(c1.equals(c2)); //false equals比较的是地址,new两次,地址不相同
System.out.println(c1.sta == c2.sta); //true ==比较的是内容
}
}
class Cloth {
public String sta;
}
public boolean equals(Object obj) {
return (this == obj);
}
这是object.class源码中的equals方法,你没有重写就只是比较地址而已