String str1 = "abc:5";
String str2 = "abc:" + str1.length();
String str3 = "abc:" + 5;
System.out.println(str1==str2);
System.out.println(str1==str3);
该计划的输出是: 假 真
但我不明白为什么?
答案 0 :(得分:1)
==
运算符只会比较参考
.equals()
会比较这些值。
在你的情况下
str1==str2
//比较两个不同的引用。
如果是,str1.equals(str2)
,它会比较值,return true
“==”运算符
在Java中,当“==”运算符用于比较2个对象时,它会检查对象是否引用内存中的相同位置。换句话说,它检查2个对象名称是否基本上是对同一内存位置的引用。“==”
运算符比较对象在内存中的位置
“等于”方法
Java String类实际上覆盖了equals()
类中的默认Object
实现 - 它会覆盖该方法,以便它只检查字符串的值,而不是它们在内存中的位置。
答案 1 :(得分:0)
这里str1 =“abc:5”;位于字符串的常量池中,str2与新的运算符连接2个不同的对象。所以str1和str2都指的是不同的对象。这就是它显示错误的原因。
答案 2 :(得分:0)
==
运算符仅用于java中的引用变量。例如,如果要比较字符a1
和a2
,则可以使用==
运算符,因为char
类型在Java中的大多数IDE中都突出显示。要检查两个字符串是否彼此相等,您可以使用.equals()
或.equalsIgnoreCase()
来比较字符串。这是因为字符串是对象,而不是基元,并且在类中需要自己的方法来测试字符串是否相同。
对于第一个System.out.println();
语句,您可以使用System.out.println(str1.equals(str2));
或System.out.println(str1.equalsIgnoreCase(str2));
。
对于第二个System.out.println();
语句,您可以使用System.out.println(str1.equals(str3));
或System.out.println(str1.equalsIgnoreCase(str3));
。