Java - 同时为单个变量分配两个表达式

时间:2010-10-22 12:05:16

标签: java

我刚刚完成Java的第一年,我一直在查看JDK源代码作为练习。

我遇到了以前从未遇到的事情,在同一个声明中对同一个变量进行了两次赋值。

e.g。

变量 = 表达式 = 表达式;

这到底发生了什么?这是一个相当普遍的事情吗?双重任务的目的是什么?

非常感谢 -Mike

5 个答案:

答案 0 :(得分:6)

variable1 = variable2 = expression;

可以写成

variable2 = expression;
variable1 = variable2;

这是因为在评估其他所有内容后,从右到左评估等号(基本上是操作顺​​序中的最低操作)。

这通常被视为俗气,我不建议。

答案 1 :(得分:3)

我想你的意思是

variable1 = variable2 = expression;

在这种情况下,表达式将仅分配给两个变量。

这可以写成

variable1 = expression;
variable2 = expression;

因此,您可以使用问题中描述的样式,以使代码更短,更优雅。

答案 2 :(得分:1)

您无法同时为一个变量分配两个表达式。

variable = 3 = 2;

此代码无法编译。也许你看到的是这样的事情:

variable = x = 3;

在这种情况下,这实际上是 variable = variable = expression ,并且将相同的表达式分配给两个变量。这是可能的,因为赋值操作的值是指定的值。因此,在这种特定情况下,首先执行x = 3,其值为3,然后将其分配给variable

答案 3 :(得分:1)

这是因为Java的分配有一个回报(左表达的结果)!

在循环中使用非常有用,就像读取字节数组中的文件一样:您可以跟踪已读取的字节数,并知道文件何时结束:

InputStream is=......
byte[] b=new byte[1024];
int read;
for(;read=is.read(b)>0;){
    //do stuff knowing how many bytes hav been readed
}

答案 4 :(得分:0)

这是合法的,但通常是气馁的。即使是Sun's standard也建议反对它。

编辑:
和其他人一样,我假设你的意思是variable1 = variable2 = expression;