在我读到的文档中,:
A variables name can be any legal identifier — an **unlimited-length** sequence of Unicode letters and digits
所以,我创建了这个类:
class Test{
public static void main(String args[])
{
int i=10;
}
}
其中 i - 不是 i,它的变量名称长度 - 3.000.000 个字符, .java 文件大小~3M。
我尝试编译这个文件:
javac Test.java
结果我有
Test.class
,Test.class 大小为 4 个字节。
现在我的问题:
unlimited-length
??.class
是一个局部变量,即它不能从其他类访问。因此,它的名字并不重要;编译器不需要存储它。此外,编译器可能会查看您的代码并确定
iiiiiii..
实际上没有执行任何操作,可以用 {int i = 10;}
替换,因为两个版本都会生成相同的程序输出(无)。2)局部变量名称不必在类文件中维护(它们不能通过反射访问)。尝试创建一个具有那么长的实例变量名称的文件,然后查看生成的类文件。
)。尝试使用
aload_<n>
或
javac -g
进行编译,它应该会留下更多信息,您可以使用javac -g:vars
进行检查。这个答案
应该有关于这个主题的有趣细节。 由于您的示例代码实际上并没有执行任何操作,因此它很可能被优化为空方法。
变量名称的存在是为了方便程序员。对于编译器和 JVM 来说,只要它是唯一的,是 1 个字符还是 100 万个字符都没有区别。