Сравнение переменных ==

Рейтинг: -1Ответов: 2Опубликовано: 11.12.2014
String q = "a";
String l = "a";
String w = q + "b";
String e = "ab";

System.out.println(q == l); //true 
System.out.println(w == e); //false
System.out.println(w.getBytes().length); // 2
System.out.println(e.getBytes().length); // 2

Почему false? Как происходит сравнение?

Ответы

▲ 6Принят

== сравнивает ссылки, а не переменные (за исключением примитивных типов).

"a" - это константа. Соответственно переменные q и l ссылаются на одну и ту же константу.

А выражение w = q + "b" пораждает новую строку, и ссылка на нее отличается от ссылки на строку "ab", на которую ссылается переменная e.

▲ 3

С помощью оператора сравнения == сравниваются не объекты, а ссылки на них.

String q = "a";
String l = new String("a");
String qa = q;

q == l //false
q == qa //true, одна и та же ссылка
q.equals(l) //true, сравнились объекты-строки, посимвольно.

Правильно сравнивать строки с помощью метода equals.

http://www.quizful.net/interview/java/equals-equality-difference Вот маленькая статья