如何查看java指针
Java 语言本身不直接支持指针操作(类似 C/C++ 的显式指针),但可以通过以下方式间接获取或模拟与对象内存地址相关的信息:
获取对象哈希码(近似内存地址)
Java 对象的 hashCode() 方法默认返回与内存地址相关的值(但可能因 JVM 实现不同而有所差异)。可通过以下代码获取:
Object obj = new Object();
int hashCode = obj.hashCode();
System.out.println("HashCode: " + hashCode);
使用 sun.misc.Unsafe(高风险)
通过反射调用 Unsafe 类可以获取对象内存地址,但该方法不稳定且仅适用于特定 JVM 实现:
import sun.misc.Unsafe;
import java.lang.reflect.Field;
public class UnsafeExample {
public static void main(String[] args) throws Exception {
Field unsafeField = Unsafe.class.getDeclaredField("theUnsafe");
unsafeField.setAccessible(true);
Unsafe unsafe = (Unsafe) unsafeField.get(null);
Object obj = new Object();
long address = unsafe.getLong(obj, Unsafe.ADDRESS_FIELD_OFFSET);
System.out.println("Address: " + address);
}
}
使用 JOL 工具(推荐)
Java Object Layout (JOL) 是 OpenJDK 提供的工具库,可精确分析对象内存布局:

// 添加 Maven 依赖:org.openjdk.jol:jol-core
import org.openjdk.jol.vm.VM;
public class JOLExample {
public static void main(String[] args) {
Object obj = new Object();
System.out.println("Address: " + VM.current().addressOf(obj));
}
}
注意事项
- Java 设计上避免直接操作指针以保证内存安全
- 对象地址可能因 GC 移动而变化,上述方法获取的值仅在特定时刻有效
- 生产环境中不建议依赖内存地址实现逻辑






