关于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




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值