2013-03-23 82 views
1

問題關於拳擊...複製裝箱值

int i = 2; 
int j = 3; 
int k = 4; 
object oi = i; 
object oj = j; 
object ok = k; 

oi = oj; 
object o = ok; 

做最後2行導致2新的再boxings?

將一個盒裝值分配給另一個盒裝值(如最後一行旁邊)是什麼意思?

這是什麼意思分配一個盒裝值到一個新的對象變量,就像在最後一行?

回答

2
oi = oj; 
object o = ok; 

裝箱值是對象。只有正常的參考副本。沒有涉及拳擊。此外,

這是什麼意思將一個盒裝值分配給另一個盒裝值,如在旁邊的最後一行?

您沒有爲another value賦值。您只是將該值分配給「變量」oi

+0

所以,當你框狀物體OI值=我,然後一個對象被分配到房子裏,我的價值。當你做oi = oj時,你用oj引用覆蓋了oi引用,所以現在oi指向j包裝器,分配給我包裝i的對象會發生什麼? – Ryan 2013-03-23 17:09:18

+0

什麼都沒有發生。你剛剛刪除了這個對象的引用。如果沒有別的東西引用它,它將在稍後被GCed。 – 2013-03-24 11:49:52

1

嗯,你可以經常檢查IL:

// int i = 2; 
IL_0000: ldc.i4.2  
IL_0001: stloc.0  // i 
// int j = 3; 
IL_0002: ldc.i4.3  
IL_0003: stloc.1  // j 
// int k = 4; 
IL_0004: ldc.i4.4  
IL_0005: stloc.2  // k 
// object oi = i; 
IL_0006: ldloc.0  // i 
IL_0007: box   System.Int32 
IL_000C: stloc.3  // oi 
// object oj = j; 
IL_000D: ldloc.1  // j 
IL_000E: box   System.Int32 
IL_0013: stloc.s  04 // oj 
// object ok = k; 
IL_0015: ldloc.2  // k 
IL_0016: box   System.Int32 
IL_001B: stloc.s  05 // ok 
// oi = oj; 
IL_001D: ldloc.s  04 // oj 
IL_001F: stloc.3  // oi 
// object o = ok; 
IL_0020: ldloc.s  05 // ok 
IL_0022: stloc.s  06 // o