2013-07-28 1 views
0

общественного класса EqualsTest {Как == Сравнение работает в Java в этом коде

public static void main(String[] args) { 

    String s1 = "abc"; 
    String s2 = s1; 
    String s5 = "abc"; 
    String s3 = new String("abc"); 
    String s4 = new String("abc"); 
    System.out.println("== comparison : " + (s1 == s5)); 
    System.out.println("== comparison : " + (s1 == s2)); 
    System.out.println("Using equals method : " + s1.equals(s2)); 
    System.out.println("== comparison : " + s3 == s4); 
    System.out.println("Using equals method : " + s3.equals(s4)); 
} 

}

Выход:

== comparison : true 
== comparison : true 
Using equals method : true 
false 
Using equals method : true 

Может кто-нибудь объяснить, как выход s3 == s4 стал ложным в вышеизложенном, также как это равнодействует работе тега, я имею в виду его работу?

+1

Поздравляем за то, что вы задали номер 1 наиболее часто задаваемого вопроса в StackOverflow. –

+0

Когда вы публикуете очень распространенный вопрос, он демонстрирует, что вы вообще не прилагали никаких усилий для исследования темы в первую очередь. Выполнение некоторых исследований важно, так как вы можете обнаружить, что вы не первый человек в мире, который думает об этой проблеме. Б) у вас есть больше шансов понять ответ. Единственное, что больше разочаровывает, чем повторять те же вопросы снова и снова, - это люди, задающие вопросы, на которые они не надеются понять ответ. –

ответ

0

Оператор «==» сравнивает местоположение памяти (оба названия переменных указывают на один и тот же экземпляр), тогда как «.equals()» сравнивает значение (даже если разные копии, они имеют один и тот же контент?)

0

Если я не ошибаюсь, оператор == сравнивает объекты, если у вас есть s3 и s4, определенные таким образом. Поскольку объекты не совпадают (не имеют одного и того же адреса или места памяти, часто называемые ссылками) - оператор дает false. Оператор == работает с другими примерами, потому что вы сравниваете примитивные строки. Это повод (по крайней мере, по моему опыту), что == не является хорошим выбором, и вы всегда должны использовать .equals, чтобы быть уверенным, что вы сравниваете строки, а не сами объекты.

+0

Нет такой вещи, как «примитивные строки». –

+0

Вы, конечно, правы - я должен был выбрать свою формулировку более тщательно. – daxur

0

Очевидно, что s3 и s4 равны значению, но не объективны. Таким образом, s3==s4 является ложным, так как он сравнивает ячейки памяти.

Вы можете узнать разницу между == и equals() в java.

«==» оператор

В Java, когда оператор «==» используется для сравнения 2 объекта, он проверяет, если объекты относятся к одному месту в памяти. В другими словами, он проверяет, являются ли имена двух объектов в основном ссылками на ту же ячейку памяти.

В равно() Метод

равенства Метод определен в классе Object, из которого каждый класс является либо прямой или косвенный потомок. По умолчанию метод equals() действительно ведет себя так же, как оператор «==», то есть он проверяет на , если оба объекта ссылаются на одно и то же место в памяти. Но метод equals фактически предназначен для сравнения содержимого двух объектов, , а не их местоположения в памяти.

Смежные вопросы