复习一下忘记的知识点。
引用传值
Java中都是传值的,但由于传递的是一份对象引用的拷贝进行传递的,但是原引用和拷贝的引用依旧指向的是堆中的同一份值,因此修改值后,也会更改原有值。
基本类型如下,这些类型一定是传值:
byte | short | int | long | float | double | char | boolean |
---|
像int数组、String这种,都不是基本类型。传参时直接拷贝,会修改原有值
public static void AddArray(int[] a){
for(int i=0; i<a.length; i++) a[i]++;
}
public static void main(String[] args) {
int[] a = {1,2,3,4,5};
AddArray(a);
for(int num:a) System.out.println(num);
}
//输出2,3,4,5,6
注意:如果是以下情况,原数组的值不变
// for each
public static void AddArray(int[] a){
for(int num:a) num++;
}
// 创建副本
public static void AddArray(int[] a){
int[] tmp = a.clone();
for(int i=0; i<tmp.length; i++) tmp[i]++;
}
原因是for-each
循环的时候,每次都是新建一个int赋值,对应的地址不同