【发布时间】:2014-10-18 22:01:36
【问题描述】:
我知道 C 风格的语言如何将数据存储在变量中。他们使用堆栈上的一两个块,并且在对象的情况下,空间也在堆上分配,用于其字段。但是java在哪里存储两个块是double还是int呢?它如何知道堆栈中的特定对象引用指向一个对象。
产生这个问题的想法是如果我这样做会发生什么
String s;
如果我理解正确,这会在堆栈中创建一个设置为 null 的对象引用,因此两个字节的零,并且堆上没有相应的空间。如果是这样,Java 如何“记住”这个引用属于一个字符串?
我可以想象记住类型不是必需的,并且字节码只对原始数据进行操作,我们知道它正确地这样做了,因为它可以编译。另一方面,这听起来像是类型擦除,这会导致很多极端情况和不安全性。如果是这种情况,为什么泛型上的类型擦除与基元和对象本身的类型擦除不同? (即,对于后者,您永远不必考虑它,并且随着泛型它一直出现)。
注意:我说的是 C 风格,因为我认为该系列中所有语言的解决方案都是相同的。如果有不同的方法,我也想知道它们的区别。
【问题讨论】:
-
C 风格并不意味着 C 风格的内存管理。你不能将 C 风格的语法等同于 C 风格的内存管理。
-
@VaibhavRaj,很公平,但我认为他们中的大多数人都以同样的方式解决了这个问题......
-
致选民:请在投反对票时发表评论。我想知道是什么让这个问题不合适。