提问人:Raj 提问时间:1/17/2020 更新时间:1/17/2020 访问量:81
赋值操作期间未引发空指针异常
Null pointer exception not being thrown during assignment operation
问:
在 java 赋值操作中,对于赋值操作:首先计算右侧表达式,然后赋值到左侧。 在下面的代码片段中,我期望赋值操作会抛出 Null 指针异常,但事实并非如此。有人可以解释为什么吗?
public class MainClass {
public static void main(String[] args) {
Class1 c = new Class1();
c.x = tell(c = null);
}
private static int tell(Object o) {
return 11;
}
}
public class Class1 {
public int x;
}
答:
0赞
ControlAltDel
1/17/2020
#1
您的问题是这一行:
c.x = tell(c = null);
正在发生的事情是:
- c 设置为 null (c = null)
- 然后发生 tell 调用,并返回一个整数
- 然后它尝试设置 c.x,但 c 现在为 null
1赞
ardenit
1/17/2020
#2
那是因为你误解了分配操作顺序。
“首先计算右侧表达式,然后分配给左侧”表示在计算右侧值后将右侧值分配给左侧值。它没有说明计算左值的顺序。
在 Java 中,您首先计算左侧,然后评估右侧,然后将右侧分配给左侧。可以通过运行以下代码来验证这一点:
public class MainClass {
public static void main(String[] args) {
Class1 c = new Class1();
(c.echo("left")).x = tell(c.echo("right")); // Prints "left", then "right"
}
private static int tell(Object o) {
return 11;
}
}
public class Class1 {
public int x;
public Class1 echo(String text) {
System.out.println(text);
return this;
}
}
评论