gpt4 book ai didi

java - Java 真的总是复制传递给方法的所有对象吗?

转载 作者:行者123 更新时间:2023-12-01 16:54:43 26 4
gpt4 key购买 nike

Java 是按值传递的。这意味着被调用的方法作用于传入的对象的副本,而不是作用于原始对象。

如果方法中没有更改对象,则似乎没有必要创建实际的副本。因此,实现创建此类副本的程序的编译器效率相当低。所有 Java 编译器(javac、gcj、ECJ 等)真的都是这么做的吗?

至少在声明参数的情况下final不复制是很有意义的。

编辑

好的,所以对象不会被复制。我很困惑,因为 String其特殊之处在于它是复制的(不可变的)。抱歉我的无知。为了弥补这一点,下面是传递对象时发生的情况的第一千个示例:

import java.lang.System;

class C { int member; }

public class Test {
static void subMethod(C object) { object.member=1; }

public static void main(String[] args) {
C object = new C();
object.member=0;
subMethod(object);
System.out.println(object.member); // prints "1"
}
}

最佳答案

是的,Java 始终是按值传递的。但对于对象来说,它传递的是引用值。换句话说,对象没有被复制,但它的引用被复制。在方法内部更改对象的属性也会在方法外部更改它。

来自here ,

However, Objects are not passed by reference. A correct statement would be Object references are passed by value.

正题:编译器只是将引用复制到堆栈中的内存块。

关于java - Java 真的总是复制传递给方法的所有对象吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34724379/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com