任何人都可以解释为什么以下输出是这样的?

时间:2014-12-13 16:05:19

标签: java

     String str1 = "abc:5";
     String str2 = "abc:" + str1.length();
     String str3 = "abc:" + 5;


     System.out.println(str1==str2);
     System.out.println(str1==str3);

该计划的输出是: 假 真

但我不明白为什么?

3 个答案:

答案 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中的引用变量。例如,如果要比较字符a1a2,则可以使用==运算符,因为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));