栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

(个人学习记录!) 值传递 值传递不用讲了,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了对象

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/571489.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号