形参与实参中间参数的传递
基本类型传递的是实际值,不能修改实参值
引用类型传递的是地址值,能够修改实参值
public class test1 { public static void main(String[] args) { person person = new person(); person.name="a"; person.age=15; changeobject(person); System.out.println(person.name); int a = 10; changebase(a); System.out.println(a); } public static void changeobject(person x){ x.name="b"; } public static void changebase(int x){ x+=10; } }
上面的person对象实参被改变了,基本整形 int 不会被改变
比较特殊的是String类型
public class test1 { public static void main(String[] args) { String s1 = "a"; String s2 = "b"; String s3 = changstring(s1); System.out.println(s1); System.out.println(s2 == s3); } public static String changstring(String x){ x="b"; return x; } }
上面这个代码分别输出 “a” 和 true
s1 并没有被改变
s2 和 s3 却指向同一个地址
这是因为有字符串常量池存在
当 s1 指向的字符串改变,会先在字符串常量值中查找是否已有相同的字符串
有就直接指向改字符串的地址
没有就新开辟一个内存,存放新字符串,而原地址的字符串是不会被修改的(描述的不清晰)
比如 s1 = "a";
变成 s1 = "b";
会现在字符串常量池找有没有 “b”,有的话s1 直接指向“b”的地址
没有s1就新建一个常量“b”,并且指向“b”