2015-08-21 38 views
3

假設我有一個數組a [],如果我想改變一個[i]的值並將其改爲零,我可以通過使用temp變量來實現。使用或「|」運算符在java中的語句

int temp = a[i]; 
a[i] = 0; 

但我遇到類似這樣的

int temp = a[i] | (a[i] = 0); 

代碼來到我很難理解這一點。請解釋它是否工作?使用相似類型的代碼是否是一種很好的做法?

+2

我會說這是不好的做法,因爲它看起來像一個非顯而易見的伎倆,它會讓讀者的代碼感到困惑(像你一樣) –

+1

小問題:它是一個數組並不相關。對於'int temp = a |來說,它也是一樣的(a = 0);',如果'a'是一個簡單的'int'。 –

+0

如果你想壓縮代碼,只需將兩個語句放在同一行:'int temp = a [i]; a [i] = 0;'。不是很好,但比那個奇怪的結構要好得多。 – Andreas

回答

7

直接代碼的目的是從數組中獲取值並將其在陣列中的位置設置爲0

讓我們看看棘手的代碼是如何做到的。

|運算符是按位運算符。首先,對a[i]進行評估,無論哪個值都是左操作數。接下來,括號強制a[i] = 0進行評估。這將數組元素設置爲0|的右操作數現在爲0。按位執行或使用值0不會更改其他值。 temp =右側的整個表達式的值是a[i]的原始值。這可以在一個聲明中完成簡單代碼所做的一切。

這段代碼很棘手,並不是很好的做法,因爲它很混亂。我絕不會使用這種技術。