2013-07-10 86 views
0
public class run 
{ 
    public static void main(String args[]) 
    { 

     boolean b; 
     int i=3; 
     b=Integer.toString(i)=="3"; 
     System.out.println(b); 

    } 
} 

根據我的代碼,它應該返回true,但輸出false。將整數值轉換爲字符串時,字符串比較失敗,並返回false布爾值

+6

使用'.equals'而不是== == –

+0

@ Zim-ZamO'Pootertoot我明白==和equals的用法。 我想了解什麼情況下重複的字符串是從字符串池中取出的? 就像「abc」==「abc」返回true一樣。爲什麼不這樣。 –

回答

1

你使用的==時,你應該使用:

b=Integer.toString(i).equals("3"); 

我不知道爲什麼你使用x。我假設一個錯字。

基本上==比較在給定從的是,由於實施細節,可能或可能沒有被拘留的整數創建一個新的字符串對象的被編譯由文字所使用的參考。

+0

謝謝你,對於錯字感到抱歉。 –

+0

@SouravPathak如果此答案有幫助,請點擊旁邊的灰色複選標記。 – hexafraction

0
public class run 
{ 
    public static void main(String args[]) 
    { 

     boolean b; 
     int i=3; 
     x=Integer.toString(i).equals.("3"); // change in this line 
     System.out.println(x); 

    } 
} 

==比較對象的引用,而等於方法comapres的值。

0
  1. 您需要使用equals,而不是==比較StringHere's a good explanation as to why.

  2. 您應養成寫equals這樣的習慣:

    x= "3".equals(Integer.toString(i)); 
    

    通知的字面意義是如何在左側,而不是右側像其他所有的答案。這樣做的好處是,如果傳入equals()的值爲空,則可避免可能的空指針異常。 "3"永遠不能爲空。如果你寫你的代碼像其他的答案,要儘可能安全,你必須添加額外的線路是這樣的:

    String s = ... 
    x = s != null && s.equals("3"); 
    

    它的工作少寫這樣的:

    String s = ... 
    x = "3".equals(s); 
    
+0

請注意,'Integer.toString(i)'不會返回null。 – arshajii

+0

@arshajii這實際上是正確的,但是像這樣寫'equals()'的習慣*仍然很好 –