Java原语可以被视为轻型对象

时间:2013-08-04 23:41:07

标签: java object heap primitive

根据这个答案here

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

3 个答案:

答案 0 :(得分:7)

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

除了作为实际Java对象的字段之外,它们也不会在堆上。你做不到new int。另请注意,当您声明一个基本类型的局部变量时,该变量就会存在。当您声明对象类型的局部变量时,您获得的只是对对象的引用,但它被设置为null,并且只通过声明变量就不会分配声明类型的对象。

请注意autoboxing在某种程度上模糊了这种区别,但区别肯定存在。

答案 1 :(得分:1)

这里有点混乱。您在问题中链接的问题是,对象中的基础可以在堆中。基元本身不能在堆中。

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

答案 2 :(得分:1)

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

原始人只有一个价值。它们没有像Objects那样的状态和行为。它们不具有继承性,多态性等。它们的行为不像实体,而是它们的属性。