是否复制了返回的对象

时间:2013-04-25 04:00:07

标签: java performance reference

说我有以下代码:

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属性永远不会被完全复制。这是因为,在实际场景中,在非常时间敏感的操作中,它将长达数百万字节。

在这种特殊情况下,我并不太关心对象的其余部分是否真正相同,只是它的属性。但是,为了完成,我还可以查询两个:如果返回作为参数传递的对象,那么它是完全相同(==)对象吗?在我的特定情况下,对象的属性是否会避免任何代价高昂的复制?

2 个答案:

答案 0 :(得分:5)

仅返回对象的引用,即它不被复制。但是,复制了原始值(int,double等)。

答案 1 :(得分:-2)

使用return this;

因此:

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

由于:this

,这将作为对象返回