Java中如何查看对象的内存地址?有哪些方法可以获取对象地址?
- 后端开发
- 2025-10-21
- 5
在Java中,查看对象的地址通常是为了理解对象的内存分配和引用关系,Java中的对象地址可以通过不同的方式来查看,以下是一些常见的方法:
使用System.out.println()方法
最简单的方法是使用System.out.println()方法,结合Integer.toHexString()函数将地址转换为十六进制字符串。
public class Main { public static void main(String[] args) { Object obj = new Object(); System.out.println("Object address: " + Integer.toHexString(obj.hashCode())); } }
使用Integer.toHexString()方法
直接使用Integer.toHexString()方法将对象的hashCode()转换为十六进制字符串。
public class Main { public static void main(String[] args) { Object obj = new Object(); System.out.println("Object address: " + Integer.toHexString(obj.hashCode())); } }
使用Object类的toString()方法
Object类的toString()方法默认返回对象的类名和哈希码的十六进制表示。
public class Main { public static void main(String[] args) { Object obj = new Object(); System.out.println("Object address: " + obj.toString()); } }
使用String.valueOf()方法
使用String.valueOf()方法将对象的哈希码转换为字符串。

public class Main { public static void main(String[] args) { Object obj = new Object(); System.out.println("Object address: " + String.valueOf(obj.hashCode())); } }
使用Arrays.deepToString()方法
对于数组,可以使用Arrays.deepToString()方法来查看数组的内存地址。


public class Main { public static void main(String[] args) { Object[] array = new Object[1]; array[0] = new Object(); System.out.println("Array address: " + Arrays.deepToString(array)); } }
| 方法 | 描述 | 示例代码 |
|---|---|---|
| System.out.println() | 打印对象的十六进制哈希码 | System.out.println("Object address: " + Integer.toHexString(obj.hashCode())); |
| Integer.toHexString() | 将哈希码转换为十六进制字符串 | System.out.println("Object address: " + Integer.toHexString(obj.hashCode())); |
| Object.toString() | 返回对象的类名和哈希码的十六进制表示 | System.out.println("Object address: " + obj.toString()); |
| String.valueOf() | 将哈希码转换为字符串 | System.out.println("Object address: " + String.valueOf(obj.hashCode())); |
| Arrays.deepToString() | 打印数组的内存地址 | System.out.println("Array address: " + Arrays.deepToString(array)); |
FAQs
Q1: 为什么使用hashCode()而不是toString()来获取对象的地址?
A1: hashCode()方法返回的是对象的哈希码,它通常与对象的内存地址相关,而toString()方法返回的是对象的字符串表示,它包含了类名和哈希码,但不是内存地址的精确表示。
Q2: 如果两个对象的hashCode()相同,它们是否具有相同的内存地址?
A2: 不一定,在Java中,即使两个对象的hashCode()相同,它们也可能具有不同的内存地址,这是因为hashCode()只是用来快速比较对象是否可能相等,而不是保证对象的唯一性。