每日编程知识-Java语言的参数不可变性的一些问题

2 阅读1分钟

之前写项目遇到一个问题,一个隐藏的比较深的问题,一个Java对象传入到一个方法内部后,其中一个属性被方法修改了,导致了Bug而很久没有排查到。

所以记录下这个问题。

先看一段代码

package org.example;

class A{
    int a = 0;
    int b = 0;
}

public class TestFinal {
    public static void main(String[] args) {
        System.out.println("ABC");
        A a1 = new A();
        a1.a = 3;
        f1(a1);
        System.out.print(a1.a); // @@1
    }

    public static void f1(final A a){
        a.a = 2;
        System.out.println(a.a);
    }
}

@@1处会返回什么呢?

答案是2。final并没有用。

C++中有一个叫做 const的值,可以修饰方法的参数,使得引用类型的参数传进去并不能被修改,Java中没有直接的关键字来实现这个特性,因此要注意!!!