gpt4 book ai didi

java - 构造函数的结尾恰好 - 在 Java 中的关系之前

转载 作者:搜寻专家 更新时间:2023-10-31 19:55:08 25 4
gpt4 key购买 nike

在 Java 中,构造函数的结束不是发生在关系之前,我的理解是否正确?下面的线程 A 和 B 未同步的代码是否可能以某种方式抛出 NullPointerException?

// Shared reference declaration
public MyClass val;

// Class declaration
public class MyClass {
public Object object;
public MyClass() {
object = new Object();
}
}

// Using in thread A
MyClass loc = new MyClass();
val = loc;

// Using in thread B
if(val != null) {
val.object.hashCode(); // IMO could throw NPE
}

最佳答案

如果是

 val.object.hashCode();

那么就有可能出现 NPE,因为虽然线程 B 可能看到 val = loc 但由于缓存,它可能还没有看到 object = new Object();出于性能原因,Java 的弱内存模型允许在不同内核等上的行为。

我认为您的原始代码不会抛出 NPE,因为如果 val 不为空,则 hashCode 将执行。

if(val != null) {
val.hashCode(); // IMO could throw NPE
}

关于java - 构造函数的结尾恰好 - 在 Java 中的关系之前,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24116468/

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