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),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 回答