java - Integer对象的内存地址

标签 java memory integer stack heap-memory

我刚开始学习Java,想问你一个关于Integer对象的问题。

例如我们有:

 Integer i = new Integer(15);

为什么输入System.out.println(i)看不到内存地址?

我知道,如果我想查看任何对象的内存地址,我输入 S.O.P(obj) 并且我看到一个内存地址,如projectname.classname@4141d797,并且它存储在堆栈中,因为对于引用类型,堆栈保存指向堆上对象的指针。

我发现这不适用于 Integer 对象。如果我输入 S.O.P(i),我会收到 15。

为什么在这种情况下堆栈不保存堆上对象的内存地址?

提前致谢!

最佳答案

因为 Integer 会覆盖默认的 Object.toString() 方法,该方法会为您提供您正在考虑的特定输出。

严格来说,它甚至不是一个内存地址,尽管当前的实现确实使用该地址作为其基础。然而,对象可以在内存中移动,并且该值不会改变,因此您不能真正从中得出任何结论。

最后,你不应该关心它。您无需担心 Java 对象的存储位置。

关于java - Integer对象的内存地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49553619/

相关文章:

Python 字符串和整数连接

java - Memcached - 缓存必须与数据库同步的信息

Java 8 构造方法引用

java - 在 Titanium 模块中使用 R.Java

memory - Virtualbox 内存使用情况

javascript - 使用字节将字母数字代码解码为键值对象

c++:如何将整数添加到字符串

java - Groovy:如何从 AST 中获取静态推断的返回类型

c++ - 扫描速度慢的内存扫描器

python - "cutting"为字符串变量并将新部分分配给相同变量名时的内存使用