面试中有人问我以下问题



根据我的理解



对于Integer e1 = 0



请帮助以适当的理解?

最佳答案

比这复杂一点。
首先,您需要知道iei变量是对象1的局部变量还是字段(静态或实例)。
如果它们是局部变量:

  • i在堆栈中。
  • ei在堆栈上(一个引用),它引用堆中的一个对象。

  • 如果它们是实例或类的字段:
  • i在堆上(作为实例或类的一部分)。
  • ei在堆上(作为实例或类的一部分),它引用堆中的对象。

  • 最后,值得注意的是,Integer e1 = 0可能根本不分配新的Integer对象。存储在e1中的引用可以是对已经存在的对象的引用。

    1-还有另一种情况。如果iei是内部类声明所引用的局部变量,则在实例化内部类时将创建第二个副本。对于该副本,空间使用情况将类似于i/ei是内部类的字段。

    关于Java包装器和原始内存分配,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36660904/

    10-10 20:16