2014-02-10 2 views
0

Почему это возвращает true?Ошибка сравнения строк в java

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 
+0

[Почему Java, если оператор не в состоянии, когда он заканчивается точкой с запятой?] (Http://stackoverflow.com/questions/12772221/why-do-java-if-statement-fail-when-it-ends -in-semicolon) – Dukeling

ответ

4

Вы ; после, если заявление.

использование:

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

Взгляните на this answer.

+2

Возможно, было бы полезно также объяснить, что происходит, когда вы помещаете туда двоеточие. – Dukeling

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

У вас есть extre; там и заявления заканчиваются там.

Это похоже на написание

if(a.equals(b)); 

и блока здесь

{ 

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

Так избавиться от этого дополнительного ;

+0

* статический блок здесь * - это не статический блок, AFAIK. – SudoRahul

+0

@ Ɍ.Ɉ Итак, что вы думаете об этом? Вы можете меня исправить? –

+0

Это [анонимный блок] (http://stackoverflow.com/q/1563030/2024761). Это статический блок - 'static {...}'. – SudoRahul

5

Вашего кода эквивалентно:

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

Таким образом, оператор печати в блоке, который будет , всегда выполнен независимо от условия, так как тело if не включает этот оператор.

Смотрите JLS - 14.6. The Empty Statement:

Пустой оператор ничего не делает.

EmptyStatement:

; 

Выполнение пустого оператора всегда завершается нормально

+2

Ahh .. язык спецификация. –

+1

Я собирался опубликовать эту ссылку !! Изменить: @ sᴜʀᴇsʜᴀᴛᴛᴀ Прочтите это http://stackoverflow.com/a/14112532/1673391 –

+1

Быстрое и яростное ...... – Maroun

0

Ваше, если условие выполнено, но ничего не будет выполняться, так как ; в следующем.

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); 
}  
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); 
} 
Смежные вопросы