2013-09-09 3 views
0

Почему следующее выражение 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)); 
} 

ответ

3

Для сравнения String в Java использовать:

if(!operand1.equals("0")){ 

} 

На пути вы делаете это вы сравниваете адрес объекта а не String содержание.

+0

хмм, я пробовал, но не получилось:/ – Taylor

+0

См отредактированный ответ с ' ! ' – Andres

+0

отлично! Спасибо за объяснение. :) – Taylor

2

В Java, String s являются неизменяемыми, что позволяет использовать язык лотов оптимизаций. Один из них называется intern ing: он помещает определенные String s в общий пул, чтобы избежать идентичных копий, теряющих пространство.

Постоянных String s всегда intern Е.Д., поэтому с помощью == и != операторов (которые проверяют, есть ли две переменные точно такой же объект, не является ли их объекты «равны») на одинаковом постоянных String с (например "0") будет сортировать работу. Использование equals почти всегда предпочтительнее.

Ваш Integer.toBinaryString вызов создает совершенно новый String, что случается, имеет то же содержание постоянного String, который используется в задании и в состоянии if, но другой объект.

0
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) .... как будет верно

s1, s3 укажут на разных пространствах ...

следовательно s1.equals (s3) будет верно, но s1 == s3 ложно