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