java中==与equals

在java的学习中会遇到比较两个内容相同的字符串结果不相等的问题。
这是因为在java中在比较基本数据类型的时候比较的是他们的值,而在比较是对象的时候比较的是其id。
下面用一段代码来解释一下。

package equals;

public class Equ {
    public static void main(String[] args) {
        String s1 = "abc";
        String s2 = "abc";
        String s3 = new String("abc");
        A a1 = new A("abc");
        B b1 = new B("abc");
        C c1 = new C("abc");
        System.out.println();//在此处设置断点
    }
}
class A {
    String str;
    public A(String str) {
        this.str = str;
    }
}
class B {
    String str;
    public B(String str) {
        this.str = str;
    }
}
class C {
    String str;
    public C(String str) {
        this.str = new String(str);
    }
}

在输出语句处 设置一个断点,然后debug
这里写图片描述
在debug界面的右上角有一窗口,里面明确写着各个对象的id

现在可以看到s1中字符串的id是17与s2中的字符串id相同,也就是说s1s2中的字符串是引用的同一个。这样不论是用==比较还是用equals比较,结果都是true

再来看s2s3s2字符串的id是17,s3字符串的id是23。这是因为s3是用new创建的对象而不是引用来的。s2 == s3相当于17 == 23结果显然是false,这时要比较他们是值需要用equals进行比较,s2.equals(s3)结果为true

a1对象与b1对象,在构造方法执行时,都是引用的"abc"因此其字符串id都是17,
而c1对象的str则是new创建的字符串,由此可以看到即使对象是用new创建,但对象中的属性也是有可能引用的同一个。

猜你喜欢

转载自blog.csdn.net/Q916490090/article/details/80375247