Java变量名长度

问题描述 投票:0回答:4

在我读到的文档中,:

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 个字节。

现在我的问题:

  1. 真的很努力,这个名字
    unlimited-length
    ??
  2. 编译器如何翻译长度为 3000000 个字符的变量名,导致我的文件如此小?
    
        
java variables
4个回答
5
投票
.class

是一个局部变量,即它不能从其他类访问。因此,它的名字并不重要;编译器不需要存储它。此外,编译器可能会查看您的代码并确定

iiiiiii..
实际上没有执行任何操作,可以用
{int i = 10;}
替换,因为两个版本都会生成相同的程序输出(无)。
    


1
投票

2)局部变量名称不必在类文件中维护(它们不能通过反射访问)。尝试创建一个具有那么长的实例变量名称的文件,然后查看生成的类文件。


1
投票

{}

)。
尝试使用

aload_<n>

javac -g
进行编译,它应该会留下更多信息,您可以使用
javac -g:vars
进行检查。

这个

答案

应该有关于这个主题的有趣细节。 由于您的示例代码实际上并没有执行任何操作,因此它很可能被优化为空方法。


0
投票

变量名称的存在是为了方便程序员。对于编译器和 JVM 来说,只要它是唯一的,是 1 个字符还是 100 万个字符都没有区别。

© www.soinside.com 2019 - 2024. All rights reserved.