2013-07-10 42 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()'的习惯*仍然很好 –