這段代碼的輸出是:後增量運算
c: 1 , id: 0
我想知道爲什麼輸出不是:
c: 0 , id: 1
class A {
private static long c;
private final long id = c++;
public A() {
print("c: " + c + " , id: " + id);
}
}
這段代碼的輸出是:後增量運算
c: 1 , id: 0
我想知道爲什麼輸出不是:
c: 0 , id: 1
class A {
private static long c;
private final long id = c++;
public A() {
print("c: " + c + " , id: " + id);
}
}
因爲像c++
的表達操作是這樣的:
c
;記住這一點(例如tmp = c
;)c
tmp
)因此,在這種情況下,與c = 0
開始,所以id
變爲0 .. 。但c
在該過程中遞增,因此c
在評估表達式後爲1。
有關更多詳細信息,請參閱Java語言規範的section 15.14.2。摘錄:
在運行時,如果操作數表達式的計算突然完成,那麼後綴遞增表達突然完成出於同樣的原因,並沒有增量發生。否則,將值1添加到變量的值中,並將總和存回變量。在添加之前,對值1和變量的值執行二進制數字提升(第5.6.2節)。如果有必要,總和會通過縮小的原始轉換(§5.1.3)和/或經過裝箱轉換(§5.1.7)縮小到存儲前的變量類型。後綴增量表達式的值是存儲新值之前的變量值。
id = c++
分配值爲c
至id
,然後它增加c
。這就好像你做了以下事情:
c = 0;
id = c; // assigns zero
c = c + 1;
嘗試id = ++c
改爲。
因爲你使用C++。
C++意味着你首先將變量保存到你的id然後增加++。
如果你使用++ c,你會先遞增然後保存到id。
但它會返回c:1 id:1,因爲C++意味着c = c + 1!
如果你說:ID = C + 1,你會得到C:0和ID:1
'C++'會增加'C'(後遞增),既然你說遞增後,'id'將得到遞增之前'c'的值。 – birryree