1.java 的值传递还是引用传递?
java 是值传递 ,
1.1当传递参数为基本类型的时候,
值是不变的,因为相当于 n=10.n指向的就是10的内存地址,当传入参数m的时候,m也指向10的地址,方法中进行加1 的时候,m的指向就变成了11的位置。但是n还是指向10的地址。
1,2当传递参数为object对象的时候,
因为 ArrayList<String> listT =new ArrayList<String>();这个listT这个引用指向的 是堆中new ArrayList<String>()这个对象地址,传参的时候也是将new对象的值穿进去,然后对这个obj进行操作。而listT是一直指向这个对象的,所以在方法中对new的对象的操作,就是现在listT指向的对象。
public static void main(String[] args) {
int n=1;
zhiChuanDi_JB(n);
System.out.println(n);
ArrayList<String> listT =new ArrayList<String>();
zhiChuanDi_Obj(listT);
System.out.println(listT.get(0));
}
public static void zhiChuanDi_JB(int m){
n=n+1;
}
public static void zhiChuanDi_Obj(ArrayList list){
list.add("oo");
}
输出:
1
oo
因此,这种情况下 list是不受影响的,因为参数list 重新指向新的地址了
public static void zhiChuanDi_ObjNew(ArrayList list){
list = new ArrayList();
list.add("what are you doing ");
}