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