代码之家  ›  专栏  ›  技术社区  ›  elvis

整数对象的内存地址

  •  2
  • elvis  · 技术社区  · 7 年前

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

    例如,我们有:

     Integer i = new Integer(15);
    

    为什么键入System时看不到内存地址。出来println(一)?

    我知道,如果我想查看任何对象的内存地址,我会键入S.O.P(obj),然后看到一个类似projectname的内存地址。classname@4141d797这存储在堆栈中,因为对于引用类型,堆栈持有指向堆上对象的指针。

    我发现这对整数对象不起作用。如果我键入S.O.P(I),我将收到15。

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

    提前感谢!

    3 回复  |  直到 7 年前
        1
  •  3
  •   Kayaman    7 年前

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

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

    最后,你不应该在意它。您不必担心Java将对象存储在哪里。

        2
  •  1
  •   Nikos Tzianas    7 年前

    尝试使用打印对象时 System.out.println 命令真正发生的是调用 toString 该对象的方法。所有对象都隐式扩展类对象 toString公司 方法返回您熟悉的输出。

    但是,对于Integer类 toString公司 被重写,并返回整数的值。这是因为如果你打印出一个整数,很可能你只想知道它代表的数字,而不是对象的字符串表示

        3
  •  0
  •   Stultuske    7 年前

    您只能看到数据类型的内存地址,这些数据类型不能正确实现 toString();

    这些类型继承 Object 类别,即: https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#toString--