1

根据这里的答案

java对象和原语都在堆上。那么从 JVM 的角度来看,除了对象在堆上占用更多空间之外,对象和原语是否相似?本质上,图元只是“轻”对象吗?

4

3 回答 3

7

Java 原语不是“轻对象”。他们是原始人。它们作为对象以两种非常重要的方式失败:它们不能进入Collection对象并且它们没有方法。

它们也不在堆上,除非作为实际 Java 对象的字段。你不能这样做new int。另请注意,当您声明一个原始类型的局部变量时,该变量就会存在。当你声明一个对象类型的局部变量时,你得到的只是对一个对象的引用,但是它被设置为null并且没有通过简单地声明变量来分配声明类型的对象。

请注意,自动装箱在某种程度上模糊了区别,但区别确实存在。

于 2013-08-04T23:45:57.647 回答
1

这里有点混乱。您在问题中链接到的问题说对象内部的原语可以在堆中。基元不能单独在堆中。

您不能int像对象一样引用它们,它们可以直接访问而不会被“取消引用”。

于 2013-08-04T23:46:12.547 回答
1

您正在推断原语可以进入堆(作为其他对象的一部分)以得出结论它们可能是轻量级对象的事实。一组原语构成了对象的状态。它们本身不是对象。

基元只是有价值。它们没有像对象那样的状态和行为。它们不表现出继承、多态性等。它们的行为不像实体,而是像它们的属性。

于 2013-08-04T23:48:34.133 回答