赋值操作期间未引发空指针异常



在java赋值操作中,对于赋值操作:首先计算右侧表达式,然后分配给左侧表达式。 在下面的代码片段中,我希望赋值操作会抛出空指针异常,但它没有。有人可以解释为什么吗?

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;
}

那是因为你误解了赋值操作顺序。

"首先计算右侧表达式,然后分配给左侧"表示在计算右侧值后将右侧值分配给左侧值。它没有说明评估左值的顺序。

在 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;
}
}

你的问题是这一行:

c.x = tell(c = null);

正在发生的事情是:

c
  1. 设置为空 (c = 空(
  2. 然后调用 tell 发生,并返回一个整数
  3. 然后它尝试设置 c.x,但 c 现在是空

相关内容

  • 没有找到相关文章

最新更新