关于java中的值传递与引用传递的见解

网上看了很多资料,有人说java有引用传递,也有值传递,也有人说java中只有值传递。

这俩种个其实都是对的,只是俩种不同的方向说的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




你可能感兴趣的:(java基础)