一位演示者刚刚提到,更改为var是有用的语法糖(对齐变量名称)。我想我应该检查一下然后发现...
List<String> list = new ArrayList<>(); // IMO this is safer future-proof coding
list.add("HELLO WORLD");..。使用invokeinterface分派生成字节码...
11: invokeinterface #12, 2 // InterfaceMethod java/util/List.add:(Ljava/lang/Object;)Z正在转换为Java 10+ var ...
var list = new ArrayList<>();
list.add("HELLO WORLD");..。使用invokevirtual分派生成字节码...
11: invokevirtual #12 // Method java/util/ArrayList.add:(Ljava/lang/Object;)Z我是否应该关心,比如说,使用var批量升级整个应用程序的源代码?例如,敏感部分会更慢(还是更快?!考虑到invokeinterface涉及更多步骤?)除此之外,是否还有其他非技术影响(例如,我看到了一个关于离线代码审查清晰度的有趣评论)
发布于 2020-09-04 06:05:34
字节码不同的原因是因为var声明推断类型为ArrayList而不是List。它等同于显式地编写ArrayList<String> list = new ArrayList<>();。因此,如果您不担心在变量声明中将List更改为ArrayList,那么您也不应该担心将其更改为var。
发布于 2020-09-04 05:59:16
这是java,不是PHP :)所以,如果我是你,我不会担心。唯一可能发生的事情是它不能编译,您需要将var‘还原’为类型化变量。
var产生的唯一问题是在代码审查期间令人头疼的问题。
至少是我。
https://stackoverflow.com/questions/63732044
复制相似问题