java为什么对字符串的引用与其他对象引用的行为不同?
在下面的代码中
public class Test {
public static void main(String[] args){
int [] arr = new int[]{1,2};
String b=new String("abc");
f(b,arr);
System.out.println(b);
System.out.println(arr[0]);
}
public static void f(String b, int[] arr){
b+="de";
b=null;
arr[0] = 5;
}
}
为什么字符串的引用变量的行为与数组的引用变量不同
我知道字符串是不可变的,所以对它们的操作会创建新的字符串,但是对字符串的引用,以及引用b如何仍然引用旧值,尽管它在f()方法中被更改为引用其他值
# 1 楼答案
不能更改任何方法的参数,但可以执行以下操作
印刷品
# 2 楼答案
在您的示例中,您正在将被调用方法中的字符串引用更改为null,但您正在更改数组引用引用的对象。。这两种操作是不同的,因此它们有不同的后果。。例如,如果您按以下方式更改代码,则它们在语义上是相同的操作
# 3 楼答案
Java中的对象引用是按值传递的。赋值只会更改值,不会更改原始对象引用
在您的示例中
arr[0]
已更改,但请尝试arr=null
,在方法返回后,您将看到它没有效果