我知道C风格的语言如何将数据存储在变量中。它们在堆栈上使用一个或两个块,并且在对象的情况下,还在堆上为其字段分配空间。但是,无论两个块是两个块还是一个int,java都存储在哪里?它是如何知道堆栈中的特定对象引用指向对象的。
产生这个问题的想法是如果我做了
会发生什么String s;
如果我理解正确,这会在堆栈中创建一个设置为null的对象引用,因此两个字节为零,堆上没有相应的空格。如果是这样,Java"如何记住"该引用属于String?
我可以想象,记住类型并不是必需的,字节码只是对原始数据进行操作,我们知道它是正确的,因为它可以编译。另一方面,这听起来像类型擦除,导致许多角落案件和不安全。如果是这种情况,为什么泛型上的类型擦除与基元和对象本身的类型擦除不同? (即,对于后者,你永远不必考虑它,并且随着泛型它一直在突然出现。)
注意:我说C风格,因为我认为该系列中所有语言的解决方案都是相同的。如果有不同的方法,我也想知道差异。
答案 0 :(得分:1)
如果String s
是
String
。String
的知识,尽管它几乎从未使用过 - 它不是真的很有必要。答案 1 :(得分:0)