gpt4 book ai didi

java - 为什么要将实例变量分配给局部变量?

转载 作者:行者123 更新时间:2023-12-05 08:28:56 25 4
gpt4 key购买 nike

例如,这是我在 Spring Boot 代码中看到的内容(在带有 webServer 变量的 catch block 中):

@Override
public final void refresh() throws BeansException, IllegalStateException {
try {
super.refresh();
}

catch (RuntimeException ex) {
WebServer webServer = this.webServer;
if (webServer != null) {
webServer.stop();
}
throw ex;
}
}

为什么不直接执行 this.webServer.stop()

局部变量webServer的作用是什么?

最佳答案

赋值的主要目的是避免在 this.webServer 被并发线程设置为 null 时产生 NullPointerException空检查和 webServer.stop() 调用之前。

也就是说,没有局部变量:

  1. 你的线程:this.webServer != null -> true
  2. 另一个线程:this.webServer = null
  3. 您的线程:this.webServer.stop() -> 可能导致 NullPointerException(取决于步骤 2 中更改的可见性,这可能不会总是发生;a竞争条件)。

在其他形式的代码中,与重复引用字段相比,将字段分配给局部变量也具有性能优势。

关于java - 为什么要将实例变量分配给局部变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72741261/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com