【发布时间】:2013-08-05 14:30:07
【问题描述】:
【问题讨论】:
-
基元不是对象,即使在 JVM 级别也是如此。
标签: java object heap-memory primitive
【问题讨论】:
标签: java object heap-memory primitive
您推断出原语可以进入堆(作为其他对象的一部分)的事实,以得出结论它们可能是轻量级对象。一组原语构成了对象的状态。它们本身不是对象。
基元只有一个值。它们没有像对象那样的状态和行为。它们不表现出继承、多态性等。它们的行为不像实体,而是像它们的属性。
【讨论】:
transient 字段,但原理相同。)原始字段当然可以处于损坏状态。如果代码在进行一些其他工作的同时正在交换字节,并且被中断(例如,被异常),则可以合理地认为原语处于损坏状态。
这里有点混乱。你在你的问题中链接到的问题说原语 inside 一个对象可以在堆中。基元不能单独在堆中。
您不能像对象一样引用int,它们可以直接访问而不被“取消引用”。
【讨论】:
Java 原语不是“轻量级对象”。他们是原始人。它们在两个非常重要的方面作为对象失败:它们不能进入 Collection 对象并且它们没有方法。
它们也不在堆上,除非作为实际 Java 对象的字段。你不能做new int。另请注意,当您声明一个原始类型的局部变量时,该变量就会存在。当你声明一个对象类型的局部变量时,你得到的只是一个对一个对象的引用,但是它被设置为null,并且通过简单地声明变量没有分配声明类型的对象。
请注意,autoboxing 有点模糊了区别,但区别确实存在。
【讨论】: