Какова логика == возврата false [toString()], когда две ссылочные переменные ссылаются на один и тот же объект с одинаковым хэш-кодом? [дубликат]

В чем логика == возвращает false, когда две ссылочные переменные ссылаются на один и тот же объект с одинаковыми значениями хэш-кода?

      public class One {  
    public static void main(String[] args) {        
        One o = new One();
        One o1 = o; 
        System.out.println(o.toString());                                       
        System.out.println(o1.toString());                                      
        System.out.println(o.hashCode());                                       
        System.out.println(o1.hashCode());                                      
        
        // Why does it print false ?
        System.out.println(o.toString()==o1.toString());    // false                    
        System.out.println(o.hashCode()==o1.hashCode());    // true                 
        System.out.println(o.equals(o1));                   // true
                            
        System.out.println(o.toString().hashCode()==o.toString().hashCode());   // true 
    }
}

2 ответа

Линия с

      System.out.println(o.toString()==o1.toString());    // false  

имеет . Каждый toString()создает новый объект String, который представляет собой разные объекты, которые имеют свои собственные ячейки памяти. Таким образом, фактически проверяется адреса памяти между этими новыми объектами String.

Всегда сравнивайте строки с String#equals, не со ==.

==Знак проверяет адреса памяти сравниваемых объектов. В твоем случае, toString() метод создает два разных Stringобъекты хранятся в двух разных местах. Вот почему вы получаете falseкогда вы пытаетесь их сравнить.
С другой стороны, equals()проверяет равенство содержимого объектов. Для ваших собственных типов данных вы должны переопределить этот метод, чтобы использовать его.
hashCodeэто своего рода уникальный идентификационный номер содержимого объектов. То есть, равные друг другу объекты должны возвращать один и тот же хэш-код.

Другие вопросы по тегам