gpt4 book ai didi

java - 按值传递给最终参数

转载 作者:行者123 更新时间:2023-12-04 05:54:15 24 4
gpt4 key购买 nike

我们有一个方法,它的参数被定义为final,然后改变这个参数的值(在这个方法中)并返回它,它不应该被改变,因为我们将它作为final传递。
但这种情况并非如此。

请帮助我理解这一点!

public static void main(String[] args) {
EmployeeBean e1 = new EmployeeBean("1", "jitu");
System.out.println("object before set >>" + e1.getEmpName());

EmployeeBean newObj = x.changeFinalvalue(e1);
System.out.println("object after set >>" + newObj.getEmpName());


public EmployeeBean changeFinalvalue(final EmployeeBean x) {
x.setEmpName("Jeet");
return x;
}

输出 :
设置后的对象>>jitu

设置后的对象>>Jeet//怀疑:它必须只是'jitu'

最佳答案

您不会更改参数引用的对象(此处不允许)。相反,您正在更改对象的状态(此处允许 )。

换句话说,当您将 e1 EmployeeBean 对象传递给该方法时, x 参数引用 e1 引用的同一对象,并且在该方法中, this 不能更改,因此您不能这样做:

public EmployeeBean changeFinalvalue(final EmployeeBean x) {
x = new EmployeeBean(); // changing the reference is not allowed!
return x;
}

但是你正在做的事情——改变对象的状态——是允许的。

我知道防止此类问题的唯一方法是制作作为参数传入的对象的深拷贝并处理复制/克隆对象。您也可以使 EmployeeBean 不可变,但那样它就不会是一个 Bean,现在是吗?

编辑:我认为这个问题必须在这里被问过很多次,经过一些搜索,我发现它当然有。请查看这些链接,以便对此进行良好的讨论。请注意,这是关于最终变量的一般问题,无论它们是方法参数还是类字段:
java-final-keyword-for-variables
java-final-modifier

关于java - 按值传递给最终参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9713611/

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