Вопрос по java – хеш-код для строковых объектов

0

Привет, я новичок в программировании Java, я хочу создать несколько строк, для этого написан код ниже. Почему он генерирует одинаковый хэш-код для обоих строковых объектов.

   class SingletonClass {
            public static String mystring="this"; 
        }
        public class SingletonObjectDemo {
            public static void main(String args[]) {
                String str = SingletonClass.mystring;
                String str2 = SingletonClass.mystring;
                System.out.println("String str  "+str.hashCode());
                System.out.println("String str1  "+str2.hashCode());
                    }
        }
Для полноты изложения я добавлю к ответам ниже, что вы все равно получите один и тот же хэш-код для двух разных объектов String с одинаковыми символами в них. Увидетьhere. Vlad
Почему ни один из ответов на этот вопрос еще не принят? Просто нажмите на галочку слева от вашего любимого ответа ... glglgl
Ваше заблуждение в том, что кодString str определяетobject, Действительно, этот код объявляет толькоreference к некоторому существующему объекту. Объекты обычно создаются сnew, но для строк естьliterals (лайк"this") которые также определяют строковые объекты. КодString str = SingletonClass.mystring просто присваивает одну ссылку другой, клонирование объекта не производится. Vlad

Ваш Ответ

5   ответов
2

Он генерирует один и тот же хэш-код для обоих строковых объектов ... потому что они представляют собой один и тот же объект.

Error: User Rate Limit ExceededstrError: User Rate Limit Exceededstr2Error: User Rate Limit ExceededStringError: User Rate Limit ExceededstrError: User Rate Limit Exceededstr2Error: User Rate Limit Exceeded"this"Error: User Rate Limit Exceeded
Error: User Rate Limit ExceededstrError: User Rate Limit Exceededstr2Error: User Rate Limit Exceeded"this".)
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded user1335578
Error: User Rate Limit Exceeded
0

Это свойство хорошего хэш-кода.

Если A и B являются объектами такими, что A.equals (B), то должно выполняться следующее свойство.

A.hashCode (). Равен (B.hashCode ())

Вы можете прочитать о hashCode и equals ()Вот

Error: User Rate Limit ExceededmustError: User Rate Limit ExceededJavadoc for Object.hashCode().
1

Они ссылаются на один и тот же объект в памяти, по сути нет никакой разницы ..

Error: User Rate Limit Exceeded
Error: User Rate Limit ExceededcontentsError: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
0

Вы говорите, что & quot; хотите создать несколько строк & quot; но вы используете что-то под названием SingletonObjectDemo. Смысл единственного элемента состоит в том, что будет существовать только один объект, независимо от того, сколько раз вы его создадите, поэтому вы не можете создавать несколько объектов. Как объясняет Луи, именно поэтому хэш-код возвращает то же самое.

Error: User Rate Limit Exceeded
0

Кажется, вы путаете объекты со ссылками на них. Когда ты пишешьString str = "a", str2 = "a"; Вы не создаете две строки, но объявляете две переменные, которые содержат точно такую же ссылку, строковой константе "a".

Кроме того, если бы они были двумя объектами, как вString str = new String("a"), str2 = new String("a") тогдаhashCodeс быstill быть одинаковыми, потому что для одинаковых объектов их хеш-коды должны совпадать - это основной принцип хеш-кода.

НО, если вы, скажем, написалиObject o = new Object(), o2 = new Object()теперь хеш-коды отличаются, потому что нет двух экземпляровObject равны (это по определению, а не по какой-то неизбежной логике).

Похожие вопросы