Java.Variable名称长度
在我阅读的文档中,:
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; }}
在哪里我 – 它不是我,它的名字长度变量 – 3
000 000 chars
。 大小.java文件~3M。
我尝试编译这个文件:
javac Test.java
结果我有Test.class
大小Test.class 4
bayts。
现在我的问题是:
- 它真的尝试,这个名字
unlimited-length
? - 编译器如何使用长度3000000个字符转换我的变量名称,结果我有这么小的
.class
文件?
iiiiiii..
是一个局部变量,即无法从其他类访问它。 因此,它的名字无关紧要; 编译器不需要存储它。 此外,编译器可能会查看您的代码并确定{int i = 10;}
实际上没有执行任何操作,并且可以由{}
替换,因为两个版本都生成相同的程序输出(无)。
1)如果某些编译器实现具有(合理的)限制而其他人可以处理任何长度的变量名称,我不会感到惊讶。 不幸的是,我不知道任何记录在案的具体例子,也没有任何具体的经验。
2)不必在类文件中维护局部变量名称(它们不能通过reflection访问)。 尝试使用长实例变量名创建一个文件并查看生成的类文件。
局部变量名称不会这样存储。 它们往往作为编译器优化的一部分被删除,并被数字替换(例如,参见aload_
)。
尝试使用javac -g
或javac -g:vars
进行编译,它应该留下更多信息,您可以使用javap
进行检查。
这个答案应该有关于这个主题的有趣细节。
由于您的示例代码实际上并不执行任何操作,因此可能会将其优化为空方法。
编译器可能已经将你真正的长名称改为像“a”这样无聊的东西。
变量名称是程序员方便的。 对于编译器和JVM来说,只要它是1个字符或100万个就没有区别,只要它是唯一的。