我目前正在阅读Java A初学者指南,在本书的某些方面,有一段代码令我感到困惑,但我找不到它的作用的解释。
int a;
int b;
a = b = 0; //This is the line I don't understand.
我的理解是将0的值复制到b然后将b复制到a中,但我不明白这是什么意思。另一个例子是:
Queue(int size) {
char q[];
putloc = getloc = 0;
}
我的问题是,如果您尝试使用数组创建先进先出队列或行,那么这段代码的重点是什么?
答案 0 :(得分:2)
这只是一个与此完全相同的快捷方式:
a = 0;
b = 0;
为什么a = b = 0;
有效?因为赋值操作是一个从右到左关联的表达式,所以b = 0
首先执行,将0
分配给b
,然后{{1}中的值已分配给b
,如下所示:a
。明确关联顺序,这就是发生的事情:
a = b
你为什么要这样做?好吧,要明确两个变量具有相同的值(并保存一些键击),但牺牲了一些可读性。我认为将每个变量声明并分配给一个单独的行更清楚,即使它们具有相同的初始值:
(a = (b = 0));
^ ^
| |
| Executes first
Executes second
答案 1 :(得分:1)
我个人的偏好是a=b=c=d
,原因如下:
a/b/c/d
)被初始化为同一事物的概念,即它们是相关的
但是,请注意:a/b/c/d
不相关(并恰好初始化为1),请不要这样做。您将降低代码的可读性。例如:
a=c=1; // Foo-function related
b=d=1; // Bar-function related
这样的链接分配会降低您将来为变量分配不同初始值的灵活性 - 因为这样您就不得不再次将它们分解。