八种基本类型的包装类,与引用类型的问题

最近遇到了一个问题,大家看过代码之后就会名白

问题:两者都为引用类型,为什么第一种情况能得到修改过后的值,而第二种不能?

// 案例1
   Customer customer = new Customer();
      customer.setCust_name("aaa");

      List<Customer> listTest = new ArrayList<Customer>();
      listTest.add(customer);

      Map<String,Customer> map1 = new HashMap<String, Customer>();
        map1.put("1",customer);
        Customer customer1 = map1.get("1");
        customer.setCust_name("令狐冲冲冲");

      System.out.println("a的值为多少Map:"+map1.get("1").getCust_name()); // 输出令狐冲冲冲
      System.out.println("a的值为多少List:"+listTest.get(0).getCust_name());// 输出令狐冲冲冲

      // 两者都为引用类型,为什么第一种情况能得到修改过后的值,而第二种不能

// 案例2
      Integer a = 1;
      List<Integer> listTest2 = new ArrayList<Integer>();
      listTest2.add(a);

      Map<String,Integer> map2 = new HashMap<String, Integer>();
       map2.put("a",a);
       Integer b = map2.get("a");
       b=666;
      System.out.println("a的值为多少Map2:"+map1.get("a").getCust_name());// 输出1
      System.out.println("a的值为多少ListTest2:"+listTest.get(0).getCust_name());// 输出1

拆箱:将引用类型转换成基本类型
装箱:将基本类型包装成引用类型
解释:因为八种基本类型的包装类会发生拆箱和装箱操作,在我定义变量的时候(Integer a = 1;)发生装箱操作,此时为引用类型。在我从map中取值的时候,发生拆箱操作,此时的到的值为基本类型,然后我将这个基本类型有赋值给了Integer b = map2.get(“a”);。此时b也是引用类型,但是它与之前的a已经不是同一个变量了,所以取不到更改后的值,所以以后用到包装类就把它们当做基本类型来对待就成了,否则很多坑。
案例一中,是自定义的引用类型,所以不管我怎么更改,都是通过地址值,来改变该对象的属性,存和取都是通过地址来改变的,所以可以保证操作的是同一个对象,所以,能得到更改后的值。
注:String类型有不可变性,所以尽管它是引用类型,但是如果用在这里是的不到更改后的值的,因为它的不可变性。

最后向大家推荐一个八种包装类写的比较好的播客
https://www.cnblogs.com/dolphin0520/p/3780005.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值