Add correct description of default Object#hashCode() method
Closes #118
This commit is contained in:
parent
b640360737
commit
669451fd22
6
core.md
6
core.md
|
@ -1241,12 +1241,14 @@ public boolean equals(Object obj) {
|
|||
}
|
||||
```
|
||||
|
||||
Реализация метода `Object.hashCode()` описана как `native`, т.е. определенной не с помощью Java кода и обычно возвращает адрес объекта в памяти:
|
||||
Реализация метода `Object.hashCode()` описана как `native`, т.е. определенной не с помощью Java кода и в общем случае зависит от реализации JVM:
|
||||
|
||||
```java
|
||||
public native int hashCode();
|
||||
```
|
||||
|
||||
В HotSpot JVM хэш код по умолчанию вычисляется с помощью алгоритма генерации простых чисел - Xorshift.
|
||||
|
||||
[к оглавлению](#java-core)
|
||||
|
||||
## Для чего нужен метод `hashCode()`?
|
||||
|
@ -1288,7 +1290,7 @@ public native int hashCode();
|
|||
[к оглавлению](#java-core)
|
||||
|
||||
## Можно ли так реализовать метод `equals(Object that) {return this.hashCode() == that.hashCode()}`?
|
||||
Строго говоря нельзя, поскольку метод `hashCode()` не гарантирует уникальность значения для каждого объекта. Однако для сравнения экземпляров класса `Object` такой код допустим, т.к. метод `hashCode()` в классе `Object` возвращает уникальные значения для разных объектов (его вычисление основано на использовании адреса объекта в памяти).
|
||||
Строго говоря нельзя, поскольку метод `hashCode()` не гарантирует уникальность значения для каждого объекта. Однако для сравнения экземпляров класса `Object` такой код допустим, т.к. метод `hashCode()` в классе `Object` возвращает уникальные значения для разных объектов (его вычисление основано на использовании алгоритма генерации случайных чисел).
|
||||
|
||||
[к оглавлению](#java-core)
|
||||
|
||||
|
|
2
jcf.md
2
jcf.md
|
@ -810,7 +810,7 @@ public class Q {
|
|||
[к оглавлению](#java-collections-framework)
|
||||
|
||||
## Почему нельзя использовать `byte[]` в качестве ключа в `HashMap`?
|
||||
Хэш-код массива не зависит от хранимых в нем элементов, а присваивается при создании массива (метод вычисления хэш-кода массива не переопределен и вычисляется по стандартному `Object.hashCode()` на основании адреса массива). Так же у массивов не переопределен `equals` и выполняется сравнение указателей. Это приводит к тому, что обратиться к сохраненному с ключом-массивом элементу не получится при использовании другого массива такого же размера и с такими же элементами, доступ можно осуществить лишь в одном случае — при использовании той же самой ссылки на массив, что использовалась для сохранения элемента.
|
||||
Хэш-код массива не зависит от хранимых в нем элементов, а присваивается при создании массива (метод вычисления хэш-кода массива не переопределен и вычисляется по стандартному `Object.hashCode()` на основе алгоритма генерации простых чисел). Так же у массивов не переопределен `equals` и выполняется сравнение указателей. Это приводит к тому, что обратиться к сохраненному с ключом-массивом элементу не получится при использовании другого массива такого же размера и с такими же элементами, доступ можно осуществить лишь в одном случае — при использовании той же самой ссылки на массив, что использовалась для сохранения элемента.
|
||||
|
||||
[к оглавлению](#java-collections-framework)
|
||||
|
||||
|
|
Loading…
Reference in New Issue