面试中有人问我以下问题
根据我的理解
对于Integer e1 = 0
请帮助以适当的理解?
最佳答案
比这复杂一点。
首先,您需要知道i
和ei
变量是对象1的局部变量还是字段(静态或实例)。
如果它们是局部变量:
i
在堆栈中。 ei
在堆栈上(一个引用),它引用堆中的一个对象。 如果它们是实例或类的字段:
i
在堆上(作为实例或类的一部分)。 ei
在堆上(作为实例或类的一部分),它引用堆中的对象。 最后,值得注意的是,
Integer e1 = 0
可能根本不分配新的Integer
对象。存储在e1
中的引用可以是对已经存在的对象的引用。1-还有另一种情况。如果
i
或ei
是内部类声明所引用的局部变量,则在实例化内部类时将创建第二个副本。对于该副本,空间使用情况将类似于i
/ei
是内部类的字段。关于Java包装器和原始内存分配,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36660904/