为什么两个值不相等?

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;

}

11个回答

这里的equals是判断对象对象指向地址是否一样, 如果要比较对象实体里面的内容一样, 需要重写equals方法, 这里使用的equals和String里面的equals不一样
String里面的equals是重写过的,比较的是内容,你的Cloth类里面需要自己重写equals

Alisa_hg
Alisa_hg 谢谢,明白了
2 年多之前 回复

对于非字符串变量,equals比较的内存的首地址,这时候和==是一样的,即比较两边指向的是不是同一个对象

Alisa_hg
Alisa_hg 兄弟,感谢
2 年多之前 回复

因为你new了两次,所以不相同,不过c1.status和c2.status相等,具体原因的话,需要好好理解对象和string类。

Alisa_hg
Alisa_hg 兄弟,谢谢
2 年多之前 回复

你这不是比较的字符串,是比较的两个Cloth对象,而这两个对象都是new的,引用地址肯定不相同,所以是false。 c1.status.equals(c2.status)才是比较字符串的引用

你这是比较的两个对象的地址,不是cloth中的status

因为 C1和C2指向的内存地址不一样 所有不相等,要明白引用类型的原理

c1和c2的地址不一样啊,你比较当然是false了,new出来的事新地址

equals比较的是地址,==比较的是内容

liyankaipoi
liyankaipoi 回复Alisa_hg: 对说反了
2 年多之前 回复
Alisa_hg
Alisa_hg 反了,==比较的是地址,equals是内容(在String类中)
2 年多之前 回复

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;
}
weixin_39548940
三三两 应该是equals()比较的是内容,==比较的是地址
2 年多之前 回复
共11条数据 1 尾页
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问