有一些传言称,在Kotlin中声明变量时,var比瓦尔更有性能,因为它没有也不需要不变性机制。我找不到任何只关注“声明变量”部分的资源,而其中许多资源关注多线程,它们通常以“瓦尔比var性能更高,因为编译器在访问它之前不需要检查该字段是否已更改”结束。你的意见是什么?
p1iqtdky1#
如果在JVM上运行Kotlin代码,您可能会面临一些针对使用val声明的不可变变量的优化。但是你永远不应该根据性能考虑使用一个而不是另一个。通过在声明类属性时使用val而不指定任何访问修饰符,基本上是告诉编译器生成“getter”方法。在使用var的情况下,你告诉它生成“getter”和“setter”,这意味着更多的代码(你不会在类体中看到它,它将出现在编译后的代码中)。val和var是关于设计的,你希望尽可能多地使用val,因为不变性比可变性更重要。即使var在性能方面“更快”,如果在任何地方都用var替换val,代码质量也会大大降低。
val
var
fkvaft9z2#
最好坚持正确的设计原则(根据逻辑更正确)和可读性,同时有一些Kotlin指南建议在可能的情况下选择val而不是var,并建议Kotlin是“val-first”语言,这对代码设计本身有微妙的影响。Kotlin的val类似于Java中的final关键字。考虑到Java和Kotlin之间的紧密连接和兼容性,看看这个简单的性能测试:https://www.baeldung.com/java-final-performance。也就是说,将final关键字应用于变量(在我们的例子中假设为val)可以对性能产生轻微的积极影响。一般来说,人们不应该期望任何显着的性能提升,但这是这些“谣言”的理由。
final
wswtfjt73#
我同意“瓦尔更有性能,因为编译器知道它在访问它之前不会改变”。我的意思是,对于实际情况的使用,如果你选择var或瓦尔,它不会影响你的性能,你应该使用上下文需要的正确的变量声明。如果变量的值不会像常量那样变化,我永远不会使用var(IDE通常会警告您这一点)。不要担心性能,这不是什么可能会潜在地降低您的应用程序的性能。为您需要的内容使用正确的变量声明,就这样。快乐编码!
3条答案
按热度按时间p1iqtdky1#
如果在JVM上运行Kotlin代码,您可能会面临一些针对使用
val
声明的不可变变量的优化。但是你永远不应该根据性能考虑使用一个而不是另一个。通过在声明类属性时使用
val
而不指定任何访问修饰符,基本上是告诉编译器生成“getter”方法。在使用var
的情况下,你告诉它生成“getter”和“setter”,这意味着更多的代码(你不会在类体中看到它,它将出现在编译后的代码中)。val
和var
是关于设计的,你希望尽可能多地使用val
,因为不变性比可变性更重要。即使var
在性能方面“更快”,如果在任何地方都用var
替换val
,代码质量也会大大降低。fkvaft9z2#
最好坚持正确的设计原则(根据逻辑更正确)和可读性,同时有一些Kotlin指南建议在可能的情况下选择
val
而不是var
,并建议Kotlin是“val-first”语言,这对代码设计本身有微妙的影响。Kotlin的
val
类似于Java中的final
关键字。考虑到Java和Kotlin之间的紧密连接和兼容性,看看这个简单的性能测试:https://www.baeldung.com/java-final-performance。也就是说,将
final
关键字应用于变量(在我们的例子中假设为val
)可以对性能产生轻微的积极影响。一般来说,人们不应该期望任何显着的性能提升,但这是这些“谣言”的理由。wswtfjt73#
我同意“瓦尔更有性能,因为编译器知道它在访问它之前不会改变”。
我的意思是,对于实际情况的使用,如果你选择var或瓦尔,它不会影响你的性能,你应该使用上下文需要的正确的变量声明。如果变量的值不会像常量那样变化,我永远不会使用var(IDE通常会警告您这一点)。不要担心性能,这不是什么可能会潜在地降低您的应用程序的性能。
为您需要的内容使用正确的变量声明,就这样。
快乐编码!