[英]String concatenation and comparison gives unexpected result in println statement
我不知道以下行為,
String str1= "abc";
String str2 = "abc";
System.out.println("str1==str2 "+ str1==str2);
System.out.println("str1==str2 " + (str1==str2))
以上語句的輸出如下:
假
str1 == str2是
為什么會這樣呢? 為什么輸出不是這樣的:
str1 == str2是
str1 == str2是
+
優先級高於==
。
所以你的代碼:
System.out.println("str1==str2 " + str1 == str2);
將有效地
System.out.println(("str1==str2 "+str1) == str2);
因此,您會得到false
。
在情況2
System.out.println("str1==str2 " + (str1==str2));
您已使用花括號明確地將str1
與str2
比較(這是true
),然后附加值。
傳遞給println的參數從左到右求值。
因此, "str1==str2 "+ str1
連接兩個字符串,稍后將它們與str2
比較並返回一個布爾值。
這是因為運算符優先級。
在第一個語句中,在==
和“ str1 == str2”附加到str1
之前,執行+
運算符,然后將附加結果與==
比較到str2
。
在第二個語句中,括號()
表示在頂級運算符(即+
)發生之前應評估的原子片段。 這就是為什么第一str1
進行比較str2
與==
,然后將結果( true
)將被附加作為字符串到"str1==str2 "
System.out.println("str1==str2 "+ str1==str2);
在上一行中,編譯器檢查是否
“ str1 == str2” + str1
就是>>>“ str1 == str2 str1”是否等於str2
這就是為什么它將其打印為false
比較兩個String應該始終使用equals
方法完成。 否則,如果比較的是相同的引用,而不是相同的值,則進行比較!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.