无法比较java中的字符串

时间:2014-02-10 07:27:30

标签: java string if-statement boolean

为什么这会返回真实?

String b =  "(5, 5)";
String a =  "(7, 8)" ;
if(a.equals(b));
{

    System.out.printf("Somehow \"%s\" and \"%s\" are the same" ,a,b);
}

输出:

Somehow "(7, 8)" and "(5, 5)" are the same

5 个答案:

答案 0 :(得分:5)

您的代码相当于:

if(a.equals(b)) { }
{
   System.out.printf("Somehow \"%s\" and \"%s\" are the same" ,a,b);
}

因此if的主体不包含该语句,因此无论条件如何,总是执行的块中的print语句。

请参阅JLS - 14.6. The Empty Statement

  

空语句不执行任何操作

     

EmptyStatement:

; 
     

执行空语句总是正常完成

答案 1 :(得分:4)

你的if语句之后有;

使用:

if(a.equals(b)) {
    System.out.printf("Somehow \"%s\" and \"%s\" are the same" ,a,b);
}

看看this answer

答案 2 :(得分:1)

if(a.equals(b));<-----

你有一个极端;那里和陈述就此结束。

这就像写作

if(a.equals(b));

和一个块

{

    System.out.printf("Somehow \"%s\" and \"%s\" are the same" ,a,b);
}

所以摆脱额外的;

答案 3 :(得分:0)

您的if条件是否满足,但自;以来没有任何内容会执行。

if(a.equals(b)); // ;  this is equal to if(a.equals(b)){}

按如下方式更正

if(a.equals(b)){
 System.out.printf("Somehow \"%s\" and \"%s\" are the same" ,a,b);
}    

答案 4 :(得分:0)

因为您在;语句后键入了if。然后它将被评估为if(a.equals(b)){};,这意味着什么都不做。

String b =  "(5, 5)";
String a =  "(7, 8)" ;
if(a.equals(b)); <-- remove this ';'
{
    System.out.printf("Somehow \"%s\" and \"%s\" are the same" ,a,b);
}