次のコードがあるとします。
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 を登録) では、Frame のbytes
プロパティが完全にコピーされないことです。これは、実際のシナリオでは、時間に非常に敏感な操作で数百万バイトの長さになるためです。
この特定のケースでは、オブジェクトの残りの部分が本当に同一であるかどうかはあまり気にせず、そのプロパティだけを気にします。しかし、完成のために、両方に問い合わせてもよいでしょう: パラメータとして渡されたオブジェクトが返された場合、それはまったく同じ (==) オブジェクトですか? そして、私の特定のケースでは、オブジェクトのプロパティはコストのかかるコピーを回避しますか?