[英]String comparison unexpected output
在下面的程序中,我得到的輸出為false 。但是據我的理解,當我們添加兩個臨時參考變量時,結果進入常量池內,不允許重復,因此我們必須在此處獲得正確的輸出,但我們得到的輸出卻為false有人能解釋一下我的原因嗎?
package com.lara;
public class Man9
{
public static void main(String[] args)
{
String s1 = "ja";
String s2 = "va";
String s3 = "ja".concat("va");
String s4 = "java";
System.out.println(s3==s4);
}
}
您對字符串連接的理解不正確。
默認情況下,只有字符串常量被保留。 現在,字符串常量不僅是字符串文字,還可以使用+
運算符將其他常量串聯起來,例如
String x = "hello";
String y = "hel" + "lo";
// x == y, as the concatenation has been performed at compile-time
但是,在您的情況下,您正在進行方法調用-這不是Java語言規范在確定常量字符串表達式時考慮的一部分。
關於什么是“常量”,請參見JLS的15.28節 。
您需要使用s3.equals(s4),而不是s3 == s4。
然后,您將獲得真實的結果。
見下面的成績單
C:\temp>java foo
false
true
C:\temp>type foo.java
public class foo
{
public static void main(String[] args)
{
String s1 = "ja";
String s2 = "va";
String s3 = "ja".concat("va");
String s4 = "java";
System.out.println(s3==s4);
System.out.println(s3.equals(s4));
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.