在接受采访时我被问到以下问题
请考虑以下代码
int i =0
Integer e1 = 0
他们将在哪些记忆中创建?
根据我的理解
int i =0
原始数据类型进入堆栈内存并且
Integer e1 = 0
整数是一个包装类进入堆内存
请帮助正确理解?
答案 0 :(得分:8)
比这复杂一点。
首先,您需要知道i
和ei
变量是对象 1 的局部变量或字段(静态或实例)。
如果它们是局部变量:
i
在堆栈中。ei
位于堆栈(引用)上,它引用堆中的对象。如果它们是实例或类的字段:
i
在堆上(作为实例或类的一部分)。ei
在堆上(如上所述),它引用堆中的对象。最后,值得注意的是Integer e1 = 0
可能根本不会分配新的Integer
对象。存储在e1
中的引用可能是对已存在的对象的引用。
1 - 还有另一个案例。如果i
或ei
是由声明的内部类引用的局部变量,则在实例化内部类时将生成第二个副本。在该副本中,空间使用情况就像它们是字段一样。