我有一个这样的类:

class MyClass {
    private val myLock = ReentrantLock()
    ...
}

在Java中,我会将此字段设为最终字段,以提供内存保证: https://stackoverflow.com/a/27254652/2674303

val美元也能提供同样的保证吗?

推荐答案

是的,至少在Kotlin/JVM上是这样.对于其他平台来说,情况可能并非如此.

虽然我找不到有关这方面的权威文档(Kotlin/JVM规范仍未编写),但按照您的示例的方式声明的私有val将编译为字节码中的final字段.您可以通过判断.class文件来查看这一点.他们不太可能在future 改变这一点以生成非final字段,因为正如您所指出的,final字段有一定的保证,而移除final将是一个突破性的变化.

当然,如果val没有后台字段(如val x get() = 1),则不会生成任何字段.

Java相关问答推荐

javafx getHostServices(). showDocument()调出Chrome而不是默认浏览器(Linux)

gitlab ci不会运行我的脚本,因为它需要数据库连接'

Java List with all combinations of 8 booleans

基本时态运算的ISO-8601周数据表示法

为什么我要创建一个单独的互斥体/锁对象?

Bean定义不是从Spring ApplationConext.xml文件加载的

Spring和可编辑";where";@Query

使用存储在字符串变量中的路径目录打开.pdf文件

如何从日志(log)行中删除包名称?

继续收到错误SQLJDBC EXCEPTION执行";org.springframework.dao.InvalidDataAccessResourceUsageException:&

try 从REST API返回对象列表时出错

在Java中将int[]矩阵添加到ArrayList中,但出现错误

EXCEL中的公式单元格显示#NAME?

深度优先搜索实现:算法只向右搜索

如果执行@BeForeEach#repository.save(),则测试中的UnitTest最终UUID会发生更改

如何在ApacheHttpClient 5中为单个请求设置代理?

如何在MPAndroidChart中的条形图上正确添加标签

Java泛型方法重载

这是JavaFX SceneBuilder的错误吗?

Keycloak + Spring Boot 角色认证不起作用