簡體   English   中英

字符串連接和比較會在println語句中產生意外結果

[英]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));

您已使用花括號明確地將str1str2比較(這是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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM