簡體   English   中英

為什么選擇System.out.println(“嘿s1 == s2:”+ s1 == s2); 打印“false”作為輸出而不是打印“hey s1 == s2:false”

[英]Why System.out.println(“hey s1==s2:”+s1==s2); prints “false” as the output instead of printing “hey s1==s2:false”

我寫了以下java代碼:

String s1 = new String("shan");
String s2 = new String("shan");
String s3="shan";
String s4="shan";
System.out.println("hey s1==s2:"+s1==s2);
System.out.println("s3==s4:"+s3==s4);
System.out.println("s1.equals(s2): "+s1.equals(s2));
System.out.println("s3.equals(s4): "+s3.equals(s4));
System.out.println("s1==s3: "+s1==s3);
System.out.println("s1.equals(s3): "+s1.equals(s3));
System.out.println("hey s1==s2:"+true);

輸出:

false
false
s1.equals(s2): true
s3.equals(s4): true
false
s1.equals(s3): true
hey s1==s2:true

為什么第5行導致輸出只是“假”而不是“hey s1 == s2:false”?

System.out.println("hey s1==s2:"+s1==s2)

評估("hey s1==s2:"+s1)==s2 ,這是false

這就是偽造印刷的原因。

這種行為的原因是+運算符的優先級高於“==”運算符。

以下將打印您的預期:

System.out.println("hey s1==s2:"+(s1==s2))
Line5: System.out.println("hey s1==s2:"+s1==s2);

由於運算符優先級"hey s1==s2:"+s1首先解析然后與s2比較導致false。

給予最高優先權以解決糾正問題。 括號具有最高優先級。

System.out.println("hey s1==s2:"+(s1==s2));

要comapre字符串,你必須調用s1.equals(s2) 結果是true ==將指針與字符串進行比較,並且不一樣。

在括號中使用括號進行環繞聲分離操作。

采用

System.out.println("hey s1==s2:"+(s1==s2));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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