2013-04-25 61 views
3

說我有下面的代碼:是否複製了返回的對象?

Frame process(Frame input) { 
if (rareEvent) { 
    input = new Frame(); 
} 
input.bytes[0] = 255; 
return input; 
} 

//Elsewhere... 
Frame example = new Frame(); 
example.bytes[0] = 127; 
example = process(example); 

顯然,在少數情況下input Frame對象被重建,它不會是完全相同的對象。但最終目標是,在正常情況下(rareEvent寄存器爲false),幀的bytes屬性將永遠不會被完全複製。這是因爲,在實際的情況下,它將在數百萬字節長的時間內處於非常時間敏感的操作中。

在這種特殊情況下,我並不太在意物體的其餘部分是否完全相同,只有它的屬性。但是,爲了完成起見,我還可以查詢兩者:如果返回一個作爲參數傳遞的對象,是不是相同(==)對象?在我的特殊情況下,對象的屬性是否會避免任何昂貴的複製?

回答

5

只返回一個對象的引用,即它不被複制。然而,原始值(int,double等)被複制。

-2

使用return this;

因此:

Frame process(Frame input) { 
     if (rareEvent) { 
      input = new Frame(); 
     } 
     input.bytes[0] = 255; 
     return this; 
    } 

這將返回因爲作爲一個對象:this

相關問題