Java 是否复制了返回的对象?

Java 是否复制了返回的对象?,java,performance,reference,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); 显然,在极少数情况下,重新创建输入帧对象时,它将不是完全相

假设我有以下代码:

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);
显然,在极少数情况下,重新创建
输入
帧对象时,它将不是完全相同的对象。但是,最终目标是,在正常情况下(
rareEvent
registers false),帧的
字节
属性永远不会被完全复制。这是因为,在实际场景中,在一个非常时间敏感的操作中,它将有数百万字节长


在这个特殊的例子中,我不太关心对象的其余部分是否真正相同,只关心其属性。但是,为了完整起见,我不妨询问两个问题:如果作为参数传递的对象随后返回,那么它是完全相同的(=)对象吗?在我的特殊情况下,对象的属性会避免任何昂贵的复制吗?

只返回对象的引用,即它不会被复制。但是,原语值(int、double等)会被复制。

使用
返回此值

因此:

    Frame process(Frame input) {
        if (rareEvent) {
            input = new Frame();
        }
        input.bytes[0] = 255;
        return this;
    }
这将作为对象返回,因为:
This