我在Java中使用concat字符串,并将其与自身进行比较,equals返回false。为什么?

我在Java中使用concat字符串,并将其与自身进行比较,equals返回false。为什么?,java,Java,我运行了以下代码: String s1 = "Hello"; if(s1.equals(s1.concat(" World"))) System.out.println("true"); else System.out.println("false"); 输出为“假”。为什么s1不等于它自己?s1等于它自己 s1.concat(“World”)不会修改s1,但会返回一个新的字符串对象,该对象不等于s1,,因为如果它等于Hello,那么您要比较的是Hello World。所以你的计划

我运行了以下代码:

 String s1 = "Hello";
 if(s1.equals(s1.concat(" World"))) 
 System.out.println("true");
 else
 System.out.println("false");

输出为“假”。为什么s1不等于它自己?

s1
等于它自己


s1.concat(“World”)
不会修改
s1
,但会返回一个新的字符串对象,该对象不等于
s1
,,因为如果它等于
Hello
,那么您要比较的是
Hello World
。所以你的计划是对的


使用
s1.concat(“World”)
可以得到字符串
Hello World
.equals()
函数,可以知道两个字符串是否完全相等。

Java字符串是不可变的。当您执行
s1.concat(“World”)
操作时,您将创建一个包含“Hello World”内容的新字符串。原始的“Hello”字符串未被修改

您可以在实际操作中看到此示例:

String hello = "Hello";
hello.concat(" World"); // Does not modifiy hello.
System.out.println(hello);  // Will print "Hello".
如果需要新值,则必须存储修改后的字符串:

String hello = "Hello";
hello = hello.concat(" World");
System.out.println(hello);  // Will print "Hello World".

输出为false,因为您没有将s1与自身进行比较。事实上,您正在将包含值“Hello”的s1与包含值“Hello World”的更新s1进行比较。这就是它计算为false的原因。另外,下次如果必须执行这样的操作,请使用此代码。它的作用相同,但效率更高

System.out.println(s1.equals(s1.concat(" World")));

是什么让您认为您在将它与自身进行比较?我认为concat方法编辑字符串,所以在concat之后,它被称为s1=“Hello world”。现在我已经了解了方法workstrings是如何不可变的,因此concat()将返回一个不等于
s1