2015-10-15 67 views
-1

我正在閱讀Java初學者指南,並在本書的某些部分有一段代碼讓我困惑,但我找不到解釋它的功能。無法理解a = b = 0的目的;

int a; 
int b; 
a = b = 0; //This is the line I don't understand. 

我所不解的是,0值被複制到B,然後b爲複製到一個,但我不明白這點會是什麼。另一個例子是:

Queue(int size) { 
    char q[]; 
    putloc = getloc = 0; 
} 

我的問題是,什麼是這段代碼的點,如果你想創建先進先出隊列或使用陣列線?

+2

這只是一個更復雜的做兩個任務的方式。在你的第一個例子中,特別奇怪的是,在聲明點初始化每個變量會更加習慣。 –

+0

如果我冒險猜測,我會說它試圖證明賦值是一個表達式並返回一個值? – merlin2011

+0

[Readability a = b = c或a = c; b = c ;?](http://stackoverflow.com/questions/5373171/readability-a-b-c-or-a-c-b-c) – YoungHobbit

回答

2

這只是一個快捷方式,不正是與此相同:

a = 0; 
b = 0; 

爲什麼a = b = 0;作品?因爲賦值操作是表達從右到左關聯,所以b = 0執行第一,分配0b,然後在b的值被分配給a,像這樣:a = b。明確的關聯順序,這是發生了什麼事情:

(a = (b = 0)); 
^^
    | | 
    | Executes first 
    Executes second 

你爲什麼要這樣做?好吧,爲了明確說明兩個變量都具有相同的值(並保存一些鍵擊),但是會犧牲一些可讀性。我認爲這是更清楚地宣佈並在一個單獨的行中指定每個變量,即使它們具有相同的初始值:

int a = 0; 
int b = 0; 
+0

OP詢問做這件事的原因是什麼,而不是簡單地分配兩行不同的值。 –

+0

@HarshitShrivastava好吧,明白了! –

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 

鏈分配這樣減少了在未來可以靈活地不同的初始值賦給變量 - 因爲那時你就不得不再次打破他們。

相關問題