Java 字符串:程序的输出不符合预期
Java Strings : The output of the program is not as expected
String s="abc";
String s1=s;
s=s+"d";
System.out.println(s==s1 +" "+ s.equals(s1));
System.out.println(s.equals(s1));
以上代码写在java。
我以为上面程序的输出可能是
false false
false
但实际输出是
false
false
谁能解释为什么这是输出,为什么不是以前的输出。
提前致谢。
System.out.println(s==s1 +" "+ s.equals(s1));
相当于:
System.out.println(s==(s1 +" "+ s.equals(s1)));
如果您使用过:
System.out.println((s==s1) + " " + s.equals(s1));
您将获得:
false false
让我们分析一下这里发生了什么:
System.out.println(s==s1 +" "+ s.equals(s1));
你有一个布尔值 + 字符串 + 布尔值。但请记住,运算符 ==
和 +
具有不同的优先级(参见 http://bmanolov.free.fr/javaoperators.php)。
如您所见,+ 运算符具有更高的优先级,因此首先执行。
这会导致以下情况:
System.out.println(s == (s1 +" "+ s.equals(s1)) );
如您所见,字符串 s1
将添加到 " "
和剩余的 false
布尔值。
所以你有
System.out.println(s == "someString");
这是错误的,因此你得到 "false"
作为输出。
String s="abc";
String s1=s;
s=s+"d";
System.out.println(s==s1 +" "+ s.equals(s1));
System.out.println(s.equals(s1));
以上代码写在java。 我以为上面程序的输出可能是
false false
false
但实际输出是
false
false
谁能解释为什么这是输出,为什么不是以前的输出。
提前致谢。
System.out.println(s==s1 +" "+ s.equals(s1));
相当于:
System.out.println(s==(s1 +" "+ s.equals(s1)));
如果您使用过:
System.out.println((s==s1) + " " + s.equals(s1));
您将获得:
false false
让我们分析一下这里发生了什么:
System.out.println(s==s1 +" "+ s.equals(s1));
你有一个布尔值 + 字符串 + 布尔值。但请记住,运算符 ==
和 +
具有不同的优先级(参见 http://bmanolov.free.fr/javaoperators.php)。
如您所见,+ 运算符具有更高的优先级,因此首先执行。 这会导致以下情况:
System.out.println(s == (s1 +" "+ s.equals(s1)) );
如您所见,字符串 s1
将添加到 " "
和剩余的 false
布尔值。
所以你有
System.out.println(s == "someString");
这是错误的,因此你得到 "false"
作为输出。