You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java/JVM中匿名对象的JVM内存存储位置及哈希码获取方法

Java匿名对象的JVM内存区域与哈希码获取

一、匿名对象在JVM中的存储区域

匿名对象和普通Java对象没有本质区别,它会被存储在JVM的堆内存中:

  • 在Java 8及后续版本里,堆内存分为新生代(Eden区、Survivor区)和老年代。新创建的匿名对象首先进入Eden区,若经过垃圾回收后仍存活,会逐步移入Survivor区,最终进入老年代。
  • 因为匿名对象没有被任何引用变量持有,它会成为下一次垃圾回收的候选对象,很快就会被回收释放内存。

二、获取匿名对象哈希码的方法

所有Java对象都继承自Object类,因此可以通过以下两种方式获取匿名对象的哈希码:

1. 直接调用hashCode()方法

直接在匿名对象上调用Object类的hashCode()方法即可,示例如下:

public class Outer {
    
    public class Inner {
        
        public void display() {
            System.out.println("Inner class method");
        }
    }
    
    public static void main(String[] args) {
        // 获取匿名Inner对象的哈希码
        System.out.println(new Outer().new Inner().hashCode());
        // 原调用逻辑
        new Outer().new Inner().display();
    }
}

如果Inner类重写了hashCode()方法,会返回重写后的结果;否则返回基于对象内存地址的哈希码。

2. 使用System.identityHashCode(Object)方法

这个方法会忽略对象自身重写的hashCode(),始终返回基于对象内存地址的哈希码,示例:

public static void main(String[] args) {
    // 先持有匿名对象引用,再获取哈希码
    Outer.Inner anonymousInner = new Outer().new Inner();
    System.out.println(System.identityHashCode(anonymousInner));
    anonymousInner.display();
    
    // 也可以链式直接调用
    System.out.println(System.identityHashCode(new Outer().new Inner()));
}

内容的提问来源于stack exchange,提问作者Venkatesh Nambiyar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 05:45:48