相关疑难解决方法(0)

hashCode()和identityHashCode()如何在后端工作?

如何做Object.hashCode()System.identityHashCode()工作在后端?是否identityHashCode()返回对象的引用?是否hashCode()取决于?对象?==运算符如何在后端工作.

hashCode()和之间有什么区别identityHashCode()

java object hashcode

40
推荐指数
5
解决办法
2万
查看次数

什么是Java中的本机实现?

如果我们查看Java Object类,那么我们可以找到一些方法,如:

public native int hashCode()
protected native Object clone()
Run Code Online (Sandbox Code Playgroud)

这些本地人是什么?这些方法如何运作?

java java-native-interface

35
推荐指数
4
解决办法
2万
查看次数

Java Object.hashCode() - 地址还是随机()?

我正在尝试理解该hashCode()方法的本机实现.这种方法到底是什么回归?它是一个内存地址还是一个随机值?

java

24
推荐指数
2
解决办法
3094
查看次数

Object.hashCode()有31位的原因吗?

如果在HotSpot Java 7 64位版本上运行以下命令.

int countTopBit = 0, countLowestBit = 0;
for (int i = 0; i < 100000000; i++) {
    int h = new Object().hashCode();
    if (h < 0)
        countTopBit++;
    if ((h & 1) == 1)
        countLowestBit++;
}
System.out.println("The count of negative hashCodes was " + countTopBit + ", the count of odd hashCodes was " + countLowestBit);
Run Code Online (Sandbox Code Playgroud)

你可以得到像这样的结果

The count of negative hashCodes was 0, the count of odd hashCodes was 49994232
Run Code Online (Sandbox Code Playgroud)

我想知道这是否意味着Object.hashCode()它只是真正的31位,为什么会这样呢?


不是不使用顶部位的情况.来自HashMap的源代码

257   /** …
Run Code Online (Sandbox Code Playgroud)

java hashcode

21
推荐指数
1
解决办法
544
查看次数

为什么hashCode()在所有连续执行中为对象返回相同的值?

我正在尝试一些围绕java中的对象相等的代码.正如我在某处读过的那样

hashCode()是通过应用散列函数生成的数字.散列函数对于每个对象可以是不同的,但也可以是相同的.在对象级别,它返回对象的内存地址.

现在,我有一个示例程序,我连续运行了10次.每次运行程序时,我都会获得与哈希码相同的值.

如果hashCode()函数返回对象的内存位置,那么java(JVM)如何在连续运行中将对象存储在相同的内存地址?

你能否就这个问题给我一些见解和看法?

我正在运行以测试此行为的程序如下:

public class EqualityIndex {

    private int index;

    public EqualityIndex(int initialIndex) {
       this.index = initialIndex;
    }

    public static void main(String[] args) {
        EqualityIndex ei = new EqualityIndex(2);
        System.out.println(ei.hashCode());
    }

}
Run Code Online (Sandbox Code Playgroud)

每次运行此程序时,返回的哈希码值都是4072869.

java equality

12
推荐指数
1
解决办法
4155
查看次数

Object.toString()如何获取"内存地址"以及如何模仿它

toString方法的Object独特之处在于它似乎是Java中唯一可以查看内存地址的地方.怎么Object做?

我想知道,以便我可以在我自己的课程中模仿它的实现.我无法使用,super.toString()因为我正在扩展一个toString已经覆盖的类.

更新:我的问题的前提是要求内存地址,但答案表明这个前提是不正确的,所以我实际上问的是:如何Object.toString()返回它的作用,我怎样才能模仿它?

java memory tostring

9
推荐指数
3
解决办法
2092
查看次数

hashCode()是如何用Java实现的

hashCode()是如何实现的?

我的假设是它使用对象内存位置作为运行哈希函数的初始数(种子).然而,这种情况并非如此.

我也看过Hash:它在内部如何运作?但它没有回答我的问题.

是的我可以下载SDK,但在我这样做并查看代码之前,也许其他人已经了解它.

谢谢 :)

编辑: 我知道它应该被覆盖等等,所以请尽量保持主题:)

java hash

6
推荐指数
2
解决办法
3846
查看次数

hashCode()的默认行为

我在同一台机器上连续运行这个程序:

class Test {
    public static void main(String[] args) {
        Test test = new Test();
        System.out.println(test.hashCode());
    }
}
Run Code Online (Sandbox Code Playgroud)

每次在我的机器上运行程序(Windows 7 64位)时结果都是一样的:4384790

在另一台机器上(Windows server 2008,64位),大多数时候它给了我:1671711.但有时候结果是:11394033.

在我的机器上,我在Java HotSpot(TM)Client VM 1.6.0_26/1.6.0_33下运行该程序

我已经阅读了Object类的文档:

尽可能合理,Object类定义的hashCode方法确实为不同的对象返回不同的整数.(这通常通过将对象的内部地址转换为整数来实现,但JavaTM编程语言不需要此实现技术.)

但是如果确实通过将对象的内部地址转换为整数来实现hashCode(),我仍然不明白为什么每次运行它时Java VM都为Test对象分配相同的地址.

是否确切知道默认的hashCode()如何运作?

java

5
推荐指数
2
解决办法
544
查看次数

hashcode是否返回内存地址?

可能重复:
什么是对象hashcode
hashCode()和identityHashCode()如何在后端工作?

我不是在讨论String类或任何其他重写hashcode的类.假设我只是创建了一个Object类的新对象,那么hashcode()无论如何都会identityHashCode(Object x)返回true,返回该对象的内存地址?

java hashcode

3
推荐指数
1
解决办法
6561
查看次数