[英]How to test equality of string values?
為什么下面的'if()'語句評估為true?
operand1 = "0";
operand1 = Integer.toBinaryString(Long.valueOf(operand1, 10).intValue());
if(operand1 != "0") {
display_secondary.setText(operand1.toUpperCase(Locale.ENGLISH));
}
上面的'if'語句被評估為true,並且運行其中的代碼。 為什么會這樣呢?
下面的代碼評估為false(按預期)。
operand1 = Integer.toBinaryString(Long.valueOf(operand1, 10).intValue());
operand1 = "0";
if(operand1 != "0") {
display_secondary.setText(operand1.toUpperCase(Locale.ENGLISH));
}
要在Java中比較String
,請使用:
if(!operand1.equals("0")){
}
在執行此操作時,您正在比較對象地址而不是String
內容。
在Java中, String
是不可變的,這使該語言可以進行很多優化。 其中之一是被稱為intern
ING:它把某些String
s轉換為共享池,以避免具有相同的拷貝浪費空間。
常量String
始終是intern
,因此使用==
和!=
運算符(檢查兩個變量是否是相同的精確對象 ,而不是它們的對象是否“相等”)在相同的常量String
(例如"0"
)的工作。 幾乎總是首選使用equals
。
您的Integer.toBinaryString
調用將構造一個全新的String
,它的內容恰好與賦值和if
條件中使用的常量String
相同,但它是一個不同的對象。
String s1="hey";
String s2="hey";
String s3=new String("hey");
System.out.println(s1==s2);
System.out.println(s1==s3);
s1,s2它們都將指向內存中的同一空間..因此s1 == s2和s1.equals(s2).... both都將為true
s1,s3將指向不同的空間...
因此s1.equals(s3)為true,但s1 == s3為false
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.