值传递与引用传递的一些细节辨析

(个人学习记录!)

值传递

值传递不用讲了,java中的基础数据类型都是值传递,它在赋值时传递的是基础数据类型的一个副本,副本的修改和原数据没有关系。

引用传递

引用传递一般是对于对象型变量而言的,传递的是该对象地址的一个副本,准确来讲是该对象的引用地址,赋值给同类型对象并修改,会影响到原数据。

值传递的基本例子

值传递很好理解,且就八种数据类型byte(1B) int(4B) short(2B) long(8B) char(2B) boolean(1bit) float(4B) double(8B)

        int a=1;
        int b=a;
        b=2;
        System.out.println(a);  //1
        System.out.println(b);  //2

引用传递的基本例子

      StringBuilder a=new StringBuilder();
      a.append("a");
      StringBuilder b=a;
      b.append("b");
      System.out.println(a);  //ab
      System.out.println(b);  //ab

对b操作影响了a,这就是引用地址的传递

疑问

1、String和基础数据类型的装箱类也无法改变原对象
可以这样测试

       String a="a";
       String b=a;

       System.out.println(a+" "+a.hashCode());   //a 97
       System.out.println(b+" "+b.hashCode());   //a 97
        String a="a";
        String b=a;
        b="b";
        System.out.println(a+" "+a.hashCode());  //a 97
        System.out.println(b+" "+b.hashCode());  //b 98

可以看到,修改b的值已经和原来的a不是同一个对象了,再联想到String是由final修饰的不可变字符串,可以理解为,b等于修改了a 后再new出来的一个String对象,同理在Integer中,我找到了
在这里插入图片描述
由此可知,装箱类中其实也是不可变的值,从而在修改时重新new了对象

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值