使用 Java var 关键字的缺点

dre*_*our 0 java jvm bytecode

一位演讲者刚刚提到更改为var是有用的语法糖(对齐变量名称)。我以为我会检查并发现...

    List<String> list = new ArrayList<>(); // IMO this is safer future-proof coding
    list.add("HELLO WORLD");
Run Code Online (Sandbox Code Playgroud)

... 使用invokeinterface调度生成字节码...

 11: invokeinterface #12,  2           // InterfaceMethod java/util/List.add:(Ljava/lang/Object;)Z
Run Code Online (Sandbox Code Playgroud)

转换为 Java 10+ var...

 11: invokeinterface #12,  2           // InterfaceMethod java/util/List.add:(Ljava/lang/Object;)Z
Run Code Online (Sandbox Code Playgroud)

... 使用invokevirtual调度生成字节码...

 11: invokevirtual #12                 // Method java/util/ArrayList.add:(Ljava/lang/Object;)Z
Run Code Online (Sandbox Code Playgroud)

例如,我是否应该关注批量升级整个应用程序的源代码var?例如,敏感部分会更慢(还是更快?!假设invokeinterface涉及更多步骤?)除此之外,是否还有其他非技术影响(例如,我看到了一个关于离线代码审查清晰度的有趣评论)

Ant*_*ony 6

字节码不同的原因是因为var声明推断了类型ArrayList而不是List. 这相当于你ArrayList<String> list = new ArrayList<>();明确地写作。因此,如果您不担心在变量声明中更改ListArrayList,则不必担心将其更改为var两者之一。