无法理解a = b = 0的目的;

时间:2015-10-15 04:10:51

标签: java arrays

我目前正在阅读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;
}

我的问题是,如果您尝试使用数组创建先进先出队列或行,那么这段代码的重点是什么?

2 个答案:

答案 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

这样的链接分配会降低您将来为变量分配不同初始值的灵活性 - 因为这样您就不得不再次将它们分解。