我想知道这个十六进制地址在内存堆中吗?在堆栈上?如何证明?
public class Arr {
public static void main(String[] args) {
int[] arr = {1, 2, 3};
System.out.println("The memory address of the arr array is:" + arr);
}
}
答案 0 :(得分:1)
它不是内存地址。它是对象的toString表示形式的结果。实际上,您调用String.valueOf(arr),它等效于调用arr.toString()。
public static String valueOf(int i) {
return Integer.toString(i);
}
它不是内存指针-它是从对象生成的hashCode。如果您查看一下字节码,就知道了
invokevirtual java.lang.Object.hashCode() : int [68]
invokestatic java.lang.Integer.toHexString(int) : java.lang.String [67]
要获得此结果,您所需要做的就是从对象中获取hashCode并将其转换为十六进制
System.out.println("Out:" + arr);
System.out.println("Out:" + String.valueOf(arr));
System.out.println("Out:" + arr.toString());
System.out.println("Out:" + Integer.toHexString(arr.hashCode()));