簡體   English   中英

如何測試字符串值的相等性?

[英]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.

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