Как проверить равенство ссылок в объекте, который реализует равенство содержимого? - PullRequest
4 голосов
/ 26 февраля 2012

... другими словами: давайте предположим, что у меня есть 2 строки, объявленные так:

String one = new String("yay!");
String two = new String("yay!");

эти две строки - два разных объекта, но если я запусту

if(one.equals(two))
   System.out.println("equals() returns true.");

Я получаю "equals () возвращает true". Это связано с тем, что класс String переопределяет метод equals () для реализации равенства уровня содержимого. Тем не менее, мне нужно получить доступ к опорному уровню равенства (как один реализовано в Object), чтобы отличить объект одну формы объекта два. Как я могу это сделать?

Я пробовал это:

one.getClass().getSuperclass().equals();

, чтобы попытаться вызвать метод Object equals () типа String, но он не сработал.

Любой совет?

Ответы [ 5 ]

3 голосов
/ 26 февраля 2012

String в Java использует String Literal Pool, это означает: «Когда вы пытаетесь создать строку, сначала поиск класса String в Literal Pool для традиционной такой же строки, если существует, возвращает ее, и если она не существуетсоздать его ", поэтому вы не можете проверить equals метод сравнения ссылок экземпляра String, вы должны использовать оператор == следующим образом:

String one = new String("yay!");
String two = new String("yay!");
if(one.equals(two))
   System.out.println("equals() returns true.");
if(one == two)
   System.out.println(" == operator returns true.");

результат равен:

equals() returns true.

см. Следующую ссылку для получения дополнительной информации:

  1. http://blog.enrii.com/2006/03/15/java-string-equality-common-mistake/
  2. Java String.equals против ==
2 голосов
/ 26 февраля 2012

Если вы хотите проверить ссылку, просто выполните:

one == two

Но будьте осторожны со строками.Есть вещь под названием Пул константных строк , поэтому они могут ссылаться на один и тот же объект.

1 голос
/ 26 февраля 2012

Используйте простое сравнение ==.Однако, чтобы избежать интернирования String, вы должны создавать свои строки, используя char массивы, такие как: String me = new String(new char[] { 'm', 'e' }); вместо использования строковых литералов "me", таких как String me = new String("me");.

1 голос
/ 26 февраля 2012
if (one == two)
    System.out.println("one and two are the same object");
0 голосов
/ 26 февраля 2012

Единственное, что вам нужно, это оператор равенства "==".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...