相关疑难解决方法(0)

Java中变量的内存地址

请看下面的图片.当我们用java创建一个带有new关键字的对象时,我们从OS获取一个内存地址.

当我们写作时,new我们可以看到一个"特殊"字符串作为输出.我的问题是:

  1. 这个输出是什么?
  2. 如果是操作系统给我们的内存地址:

    a)如何将此字符串转换为二进制?

    b)如何获得一个整数变量地址?

替代文字

java jvm memory-management hashcode memory-address

128
推荐指数
5
解决办法
13万
查看次数

默认的.equals和.hashCode如何适用于我的课程?

说我有自己的课

public class MyObj { /* ... */ }
Run Code Online (Sandbox Code Playgroud)

它有一些属性和方法.它不实现equals,不实现hashCode.

一旦我们调用equals和hashCode,默认实现是什么?来自Object类?他们是什么?默认等于如何工作?默认的hashCode如何工作以及返回什么?==只会检查它们是否引用同一个对象,所以这很容易,但是equals()和hashCode()方法呢?

java equality equals object hashcode

103
推荐指数
3
解决办法
6万
查看次数

是否可以在线浏览OpenJDK的来源?

是否可以在线浏览OpenJDK的源代码,就像我可以使用SourceForge的项目一样?我之前从未使用过水星,所以我感到很困惑.

(注意:我不想下载源代码.我只想在线浏览它,看看如何实现某些方法.)

mercurial openjdk

76
推荐指数
5
解决办法
3万
查看次数

`hashCode`的默认实现是什么?

如果没有覆盖该hashCode方法,那么默认实现是hashCode什么?

java hashcode

54
推荐指数
3
解决办法
6万
查看次数

哈希码唯一性

两个Object实例是否可能具有相同的哈希码?

理论上,对象的哈希码是从其内存地址派生的,因此所有哈希码都应该是唯一的,但是如果在GC期间移动对象会怎样?

java hashcode

13
推荐指数
4
解决办法
1万
查看次数

java Object中hashCode的实现是什么?

可能重复:
hashCode()是如何用Java计算的

我发现Java中hashCode(?的根类方法没有实现Object:

public native int hashCode(); 
Run Code Online (Sandbox Code Playgroud)

如果我有一个Object a和一个Object b,我如何知道a.hashCode()b.hashCode()价值而不使用System.out.println()?只是通过hashCode实施.

我尝试了new两个ArrayList对象,令我惊讶的是,hashCode()值是相同的:它们都是1.

java hashcode java-7

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

为什么Object.hashCode()在运行中返回相同的值

hashCode()HotSpot 的默认实现返回一个随机值并将其存储在对象头中.这在Java 8中似乎没有改变,其中哈希值是通过调用来计算的os::random():

static inline intptr_t get_next_hash(Thread * Self, oop obj) {
  intptr_t value = 0 ;
  if (hashCode == 0) {
     // This form uses an unguarded global Park-Miller RNG,
     // so it's possible for two threads to race and generate the same RNG.
     // On MP system we'll have lots of RW access to a global, so the
     // mechanism induces lots of coherency traffic.
     value = os::random() ;
  } else …
Run Code Online (Sandbox Code Playgroud)

java random hashcode

8
推荐指数
2
解决办法
603
查看次数

如何证明Object.hashCode()可以为Java中的两个不同对象生成类似的哈希代码?

与面试官讨论了Java Hashmaps的内部实现,以及如果我们覆盖equals()而不是Employee对象的HashCode()方法,它将如何表现.

他告诉我,对于默认的object.hashCode()实现,两个不同对象的hashCode永远不会相同,除非我们自己覆盖hashCode().

另外,有人告诉我,一个存储桶中只能有一个唯一的Hashcode,而具有相同哈希码的对象只能存储在一个存储桶中.我知道这与第一点相矛盾.咄!

根据我的记忆,我告诉他Java Hashcode合同说两个不同的对象可能有相同的hashcode().

根据我的采访者的说法,默认的object.hashcode()永远不会有两个不同对象的相同hashcode(),这是真的吗?

甚至可以编写一个演示此代码的代码.根据我的理解,Object.hashcode()可以产生2 ^ 30个唯一值,如何产生碰撞,具有如此低的碰撞可能性,以证明两个不同的对象可以使用Object类方法获得相同的hashcode().

或者他是对的,使用默认的Object.HashCode()实现,我们永远不会发生冲突,即两个不同的对象永远不会有相同的HashCode.如果是这样,为什么这么多java手册没有明确说明.

如何编写一些代码来演示这个?因为在演示这个时,我还可以证明hashmap中的一个桶可以包含不同的HashCodes(我试图向他展示hashMap被扩展的调试器,但他告诉我这只是逻辑实现而不是内部算法?)

java algorithm collections hashcode

7
推荐指数
1
解决办法
573
查看次数

Java中零长度的数组

下面的代码

public class Example {
    static int[] member;
    public static void main(String[] args) {
        int[] ic = new int[0];
        if (ic == null){
            System.out.println("ic is null");
        }
        System.out.println(ic);  // [I@659e0bfd
        if(member == null){
            System.out.println("member is null");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

很明显,不能在零长度数组中添加元素。

ic指向什么,如果ic不是null

如下图所示,是否ic指向内存位置659e0bfd(为空)?

在此处输入图片说明

java arrays

5
推荐指数
1
解决办法
472
查看次数

Java默认使用什么散列函数,我们可以覆盖默认行为吗?

我将通过Cormen等人的视频介绍算法,并讨论了几种散列函数.我想知道Java默认使用什么散列函数?对于用作键的不同类型的对象,散列函数实际上是否有所不同?Collections框架中是否有api让我们编写自己的哈希算法?

java hash

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