java中两个字符串比较应该如何理解

java中两个字符串比较应该如何理解(equals和==的真值如何确定)

img

==比较地址,equals是比较值
name1.equals(name2) 返回 true,因为它们的内容相同。
name1.equals(name3.trim()) 返回 false ,因为 name3 中有空格
name1 == name2 返回 false,因为它们是两个不同的对象
name1 == name3返回false,因为它们是两个不同的对象
name3 == name4 返回 true,因为它们都是指向字符串常量池中的同一个对象

equals是比较字符串的内容。
==是比较两个对象的地址。
两个内容一样,创建方式不同的字符串,可能结果是:equals为ture,==为false。
比如以下代码:

        String s1 = new String("abc");
        String s2 = "abc";
        String s3 = "a" + "b" + "c";  //编译器会优化为"abc"
        System.out.println(s1==s2);  //false
        System.out.println(s2==s3);  //true,常量池中的"abc"
        System.out.println(s1.equals(s2) && s1.equals(s3));  //true

以下内容部分参考ChatGPT模型:


在Java中,字符串比较有两种方式:equals和==。

equals是字符串类的方法,用于比较两个字符串的内容是否相同。例如:

String str1 = "hello";
String str2 = "hello";
if(str1.equals(str2)){
  System.out.println("str1和str2的内容相同");
}

==是Java中的运算符,用于比较两个字符串是否是同一个对象。例如:

String str1 = "hello";
String str2 = "hello";
if(str1 == str2){
  System.out.println("str1和str2是同一个对象");
}

需要注意的是,如果使用new关键字创建字符串对象,则无论是equals还是==都会比较其在内存中的地址。

例如:

String str1 = new String("hello");
String str2 = new String("hello");
if(str1.equals(str2)){
  System.out.println("str1和str2的内容相同");
}
if(str1 == str2){
  System.out.println("str1和str2是同一个对象");
}

上述代码中,虽然str1和str2的内容相同,但是它们不是同一个对象,因此第二个判断语句不成立。

综上所述,equals比较的是两个字符串的内容,==比较的是两个字符串是否是同一个对象。


如果我的建议对您有帮助、请点击采纳、祝您生活愉快