2015-08-21 2 views
0

Я новичок в Java, и мне трудно понять, почему оператор if/else в этом коде кажется, что строки a и c не равны.Почему эти строки не равны?

public class Main { 
    public static void main(String[] args) { 
     String a = "foo"; 
     String b = "Foo"; 
     String c = b.toLowerCase(); 

     System.out.println(c); 

     if (a == c) { 
      System.out.println("Strings are equal"); 
     } 
     else { 
      System.out.println("Strings are NOT equal"); 
     } 
    } 
} 

Вот результат:

foo 
Strings are NOT equal 

Я использую www.learnjava.org и их веб-сервис для компиляции/выполнения кода, если это имеет значение.

Благодаря

+4

Вы достаточно активны в сообществе, я ожидаю, что вы узнаете, что хотите найти SO, прежде чем задавать вопрос. – CubeJockey

+0

Я, извините, я думал, что ошибка была в методе 'toLowerCase', и обыскал это. Я считал само собой разумеющимся, что '==' был эквивалентен по значению, так как руководство, которое я использую, делает это для целых чисел. –

ответ

1

Вы не должны сравнивать строки с ==, так как это только сравнивает, если они и тот же объект, но если они равны.

String x = "abc"; 
String y = x; 
String z = "abc"; 

boolean a = x == y; // true 
boolean b = x == z; // can be false (unless the compiler optimizes it, but you shouldn't rely on that) 
boolean c = x.equals(z); // true - this is the right way to compare Strings 
+0

Ahh, так точно противоположность Python? –

+3

Для таких вопросов используйте вместо этого дублирующую причину закрытия. Независимо от того, какой ответ вы бы поставили здесь, он не будет превышать общую тщательность ответов в канонической Q + A. –

+2

Я не тот, кто ниспроверг, но ответ на такие вопросы, на которые явно ответили слишком много раз, уже никому не помогает. Пожалуйста, проголосуйте, чтобы закрыть. – Keppil