刚才群里有人问这个问题,其实这是一个基础问题。弄清楚内存你就懂了。先看代码:
public class TransTest {
static class Me {
int i;
}
public static void changeBasicType(int i) {
i = 100;
}
public static void changeRefType(Me m) {
m.i = 100;
}
public static void changeString(String str) {
str = "java";
}
@Test
public void doTest() {
int a = 20;
changeBasicType(a);
System.out.println(a);
/***************************/
Me mm = new Me();
mm.i = 20;
changeRefType(mm);
System.out.println(mm.i);
/********************************/
String xx = "hello";
changeString(xx);
System.out.println(xx);
}
}
打印结果:
20
100
hello
内存模型(比较粗糙,简略看下):
总结:调用传参方法时,对方法里面的参数操作一致视为“=”, 即赋值的作用。
例如:
//调用这句时,相当于m = mm; m指向mm的对象。
changeRefType(mm);
public static void changeRefType(Me m) {
//调用这句时,改变了这个对象i的值。
m.i = 100;
}