题目:
Integer integer=new Integer(1);
A(integer);
System.out.println(integer);
String string="nu";
B(string);
System.out.println(string);
StringBuilder sBuilder=new StringBuilder();
C(sBuilder);
System.out.println(sBuilder);
int i=0;
E(i);
System.out.println(i);
private static void E(int i){
i=99;
}
private static void A(Integer i){
i=new Integer(2);
}
private static void B(String s){
s="wori" ;
}
private static void C(StringBuilder sb){
sb.append("ADAD");
}
求输出。
先说结果:除了一个有改变,其他不变
其实这个很简单的~基础过关秒杀;
说说重点:明白参数传值的原理。然后一切明了
首先:参数传值都是值传递。所以传进来的都是地址(针对引用类型)或者值(针对值类型),然后这个参数就被赋值了。例如:B(string);private static void B(String s)。说的就是有个String类型的变量s 指向String类型的变量string 所在的地址空间
接下来:看函数对这个参数进行什么操作,就用函数B为例子。
private static void B(String s){s="wori" ;}这个String类型的变量s重新指向一个值为“wori”的地址空间(为什么会重新指向,这个不用说了吧),那么就是跟变量string一点关系都没有,变量string一直指在值为“nu”的地址空间。所以输出是nu
但是为什么函数C会改变呢?因为StringBuilder类型的变量sb它指向的地址没有变,跟StringBuilder类型的变量sBuilder一样。所以对变量sb进行的操作依然对变量sBuilder有影响。
解释完毕。总结:不知道为什么老是记不住的。于是写下来。求大家拍砖