gpt4 book ai didi

java - 如果传入方法,最终变量如何工作?

转载 作者:行者123 更新时间:2023-11-29 07:03:06 26 4
gpt4 key购买 nike

我有一个非常简单的问题,只是想了解更多关于 final 方法参数的信息。

final 变量在其生命周期内只能初始化一次。在 JAVA 方法中,参数被接受为按值传递,引用也作为值传递。

现在我的问题是:

方法如何不知道传递的对象是 final 并且已经初始化?

示例代码如下:

public static void xyz(Abc obj) {
System.out.println("hash code in xyz method :"+obj.hashCode());
obj = new Abc(); // here there is no issue to initialize it again
}

public static void abc() {
final Abc obj = new Abc();
//obj=new Abc(); // final variable can be initialized just once

System.out.println("hash code in abc method :"+obj.hashCode());
xyz(obj);
}

public static void main(String[] a) {
abc();
}

最佳答案

那是因为引用是按值传递的;您不能在 Java 中重新设置引用。如果您将 obj 重新分配给其他东西,它只会在方法范围内重新分配,而不是在调用范围内。因此,您所拥有的只是最终变量引用的副本

因此没有违反原始对象的“最终性”。

如果你也想让参数成为final,你可以简单地做:

public String myMethod(final Object myParameter) {
...
}

我认为您可能将 final 变量与 不变性 混淆了。不变性是完全不同的东西。这意味着底层对象的状态一旦初始化就无法修改。引用此对象的变量 可能是也可能不是final;它与对象的可变性或不变性无关。事实上,final 变量指向的对象可以被修改(如果它是可变的)并且使用 final 将无法防止这种情况发生。它所做的是防止重新分配的可能性。

关于java - 如果传入方法,最终变量如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22949718/

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