java只有值传递
1.在方法中传递基本数据类型时,传入的值是原值的拷贝,所以在方法中改变此数据不会影响到原数据
2.在方法中传递引用数据类型时,传入的是引用的拷贝
列1:
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("b");
test(list);
System.out.println(list); // 打印b,a
}
private static void test(List<String> list) {
//list = new ArrayList<>();
list.add("a"); // 不改变该引用时,该引用指向的是原集合
System.out.println(list);// 打印b,a
}
改变原引用
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("b");
test(list);
System.out.println(list); // 打印b
}
private static void test(List<String> list) {
list = new ArrayList<>();// 使这个copy的引用指向新的集合
list.add("a"); // 想新集合中添加元素
System.out.println(list);// 打印a
}
列2:
public static void main(String[] args) {
StringBuilder A = new StringBuilder("a");
StringBuilder B = new StringBuilder("b");
test(A, B);
System.out.println(A);// 打印ab
System.out.println(B);// 打印b
}
public static void test(StringBuilder A, StringBuilder B) {
A.append(B);// 引用没有改变,会更新原有值,打印ab
B = A;// 复制的引用指向A,原有引用不改变
}