只要C的基本功良好,java的很多问题就好理解。
java中,比如这样的数据定义和函数定义:
public class MTest {
public static int [] a=new int[]{1,2};
public static int [] b=new int[]{3,4};
public static int [] change(int [] t,int [] k)
{ t[0]=5;
k=new int[]{7,8};
System.out.println("in function"+ k);
return k;
}
}
执行以下程序,问函数参数中的数组内容是否发生变化。
public static void main(String[] args) {
int [] c=change(a,b);
System.out.println("after function:");
System.out.println(Arrays.toString(a));
System.out.println(Arrays.toString(b));
System.out.println("get result"+c);
System.out.println(Arrays.toString(c));
}
结果是这个样子:
in function[I@2a139a55
after function:
[5, 2]
[3, 4]
get result[I@2a139a55
[7, 8]
结论:函数参数是形参指针的传递,可以通过指针修改所指内容。但是,在函数内部,指针指向新数组(赋值为新数组),参数本身不受影响。初学者,听起来很绕。只有在工程应用中,大家才好理解。
函数内部新创建的数组,可以通过返回值传出去。
java的对象传递,也是指针传递。基本功良好,多在实践中应用,可以帮助理解很多问题。