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);

明らかに、inputFrame オブジェクトが再作成されるというまれなイベントでは、まったく同じオブジェクトにはなりません。ただし、最終的な目標は、通常の状況 (rareEventが false を登録) では、Frame のbytesプロパティが完全にコピーされないことです。これは、実際のシナリオでは、時間に非常に敏感な操作で数百万バイトの長さになるためです。

この特定のケースでは、オブジェクトの残りの部分が本当に同一であるかどうかはあまり気にせず、そのプロパティだけを気にします。しかし、完成のために、両方に問い合わせてもよいでしょう: パラメータとして渡されたオブジェクトが返された場合、それはまったく同じ (==) オブジェクトですか? そして、私の特定のケースでは、オブジェクトのプロパティはコストのかかるコピーを回避しますか?

4

2 に答える 2

5

オブジェクトの参照のみが返されます。つまり、コピーされません。ただし、プリミティブ値 (int、double など) はコピーされます。

于 2013-04-25T04:01:22.240 に答える
-2

使用する return this;

したがって:

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

次の理由により、これはオブジェクトとして返されます。this

于 2013-04-25T04:21:24.153 に答える