网上看了很多资料,有人说java有引用传递,也有值传递,也有人说java中只有值传递。
此时如果输出用户名:是李四,因为p作为参数传给change
在计算机中:p在栈里面,new Person在堆中,p是引用是指向堆中的对象
作为参数传递时,是 把p的引用中的地址值复制了一份给入参p
也就是说现在俩个p均指向同一个内存地址,所以在change里面改值,其实是改的内存的值,外面的p同样指向这一块内存,所以其值也改变了。
这俩种个其实都是对的,只是俩种不同的方向说的java中除了基本类型外都是引用传递,所谓的引用传递,说的是
Person p = new Person();
p.setName("张三");
public void change(Person p){
p.setName("李四");
}
System.out.println(p.getName());
此时如果输出用户名:是李四,因为p作为参数传给change
在计算机中:p在栈里面,new Person在堆中,p是引用是指向堆中的对象
作为参数传递时,是 把p的引用中的地址值复制了一份给入参p
也就是说现在俩个p均指向同一个内存地址,所以在change里面改值,其实是改的内存的值,外面的p同样指向这一块内存,所以其值也改变了。
new String对象也是在堆中生成一块内容,如果是String a=“aa”,这是在常量池中新增一块地址
public static void main(String[] args) {
String x = new String("ab");
change(x);
System.out.println(x);
}
public static void change(String x) {
x = "cd";
}
x作为所谓的引用传递,传递进来后,x="cd" 是在常量池中生成一块地址,把x地址修改赋值到常量池中,所以这时在外面输出答案时还是 ab