我刚刚完成Java的第一年,我一直在查看JDK源代码作为练习。
我遇到了以前从未遇到的事情,在同一个声明中对同一个变量进行了两次赋值。
e.g。
变量 = 表达式 = 表达式;
这到底发生了什么?这是一个相当普遍的事情吗?双重任务的目的是什么?
非常感谢 -Mike
答案 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;