Java Wrapper&原始内存分配

时间:2016-04-16 06:25:20

标签: java memory-management

在接受采访时我被问到以下问题

  

请考虑以下代码

     
    

int i =0
    Integer e1 = 0
    他们将在哪些记忆中创建?

  

根据我的理解

  
    

int i =0

         
      

原始数据类型进入堆栈内存并且

    
         

Integer e1 = 0

         
      

整数是一个包装类进入堆内存

    
  

请帮助正确理解?

1 个答案:

答案 0 :(得分:8)

比这复杂一点。

首先,您需要知道iei变量是对象 1 的局部变量或字段(静态或实例)。

如果它们是局部变量:

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

如果它们是实例或类的字段:

  • i在堆上(作为实例或类的一部分)。
  • ei在堆上(如上所述),它引用堆中的对象。

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

1 - 还有另一个案例。如果iei是由声明的内部类引用的局部变量,则在实例化内部类时将生成第二个副本。在该副本中,空间使用情况就像它们是字段一样。