Java,System.out.println(),里面有一个赋值

时间:2011-08-25 18:00:36

标签: java

我刚注意到你可以做System.out.println(FooObject.fooNumber = 4);,它会将4分配给fooNumber并输出值4.为什么在赋值后输出FooNumber? 此外,优先规则规定分配首先发生,但没有关于打印首先发生还是分配。我对吗?那么为什么以前的值不会先打印然后再分配?据我所知,子表达式在Java中从左到右进行了评估,这在这里适用吗?

4 个答案:

答案 0 :(得分:1)

这是有效的Java语法,用于执行内联赋值语句,然后返回指定的值。使用此语法的一个常见示例是读取文件:

while ((str = in.readLine()) != null) {
    process(str);
}

答案 1 :(得分:0)

是的,你几乎可以在任何地方做到这一点,事实上它会将值赋给fooNumber,它可能会很烦人,因为通常你不想分配一些东西但是将它与double ==进行比较,并且可能很容易错过。

它会输出fooNumber,因为它会先分配它然后显示它的值。

答案 2 :(得分:0)

尝试:int x = FooObject.fooNumber = 4
x也会得到值4,在java中,operator =,正在向后反映,评估是从右到左,所以这里同样适用,并且值传递给{ {1}}将是4。 你的命令实际上相当于:

println()

答案 3 :(得分:0)

这是因为a = b之类的表达式在分配后的类型为a,值为a。此语句是递归的,因此a = b = c和其他语句也是相同的。