java - 如何证明堆内存中java对象存储的十六进制地址
问题描述
我想知道这个十六进制地址在内存堆中?在栈上?如何证明?
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);
}
}
在这里输入图片描述 谢谢大家
解决方案
它不是内存地址。这是您的对象的 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()));
推荐阅读
- java - 如何根据变量选择同一张表的不同数据
- data-structures - 为字母方程创建二叉树
- php - 如何上传图片并将网址保存在数据库中?
- c - 将 Arduino 连接到 TCP 并执行 HTTP Post
- ios - 如何在这样的 iOS 应用程序中创建图表?
- python - 为什么 whoosh Search 在 sklearn 中的性能比 tfidfvectorizer 差?
- java - 引起:org.springframework.beans.factory.NoSuchBeanDefinitionException:运行测试时
- javascript - javascript事件冒泡可以在html控件上完成吗
- swift - FileManager.containerURL(forSecurityApplicationGroupIdentifier) 在单元测试中返回 nil
- excel - 使用具有多个搜索变量的 VBA 搜索多个 Excel 文件并输出到一张纸/CSV