說我有下面的代碼:是否複製了返回的對象?
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
屬性將永遠不會被完全複製。這是因爲,在實際的情況下,它將在數百萬字節長的時間內處於非常時間敏感的操作中。
在這種特殊情況下,我並不太在意物體的其餘部分是否完全相同,只有它的屬性。但是,爲了完成起見,我還可以查詢兩者:如果返回一個作爲參數傳遞的對象,是不是相同(==)對象?在我的特殊情況下,對象的屬性是否會避免任何昂貴的複製?