之前写项目遇到一个问题,一个隐藏的比较深的问题,一个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中没有直接的关键字来实现这个特性,因此要注意!!!