【使用注意】Boolean是final类型,值初始化后不能被更改

博主在服务代码逻辑中,想修改map里value为Boolean类型的值却无法实现。经查找资料发现,Boolean实现类被定义为final。通过测试final类和自定义类,发现自定义非final类可通过引用变量修改对象内容,提醒要注重原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

由于服务代码逻辑需要在map中的value存储Boolean,后面的代码逻辑 中我想更改Boolean的值发现更改不了,后来查找资料才发现原来Boolean实现类是定义为final,还是对原理不了解呀,以后多注重原理。

测试代码(final类):

	HashMap<String,Boolean> map = new HashMap<String, Boolean>();
	map.put("1", false);
	map.put("2", true);
	map.put("3", false);
	Collection<Boolean> values = map.values();
	for (Boolean v : values) {
		v = Boolean.valueOf(true);
	}
	Collection<Boolean> vs = map.values();
	System.out.println(vs);

结果:[false, true, false]

发现值依旧没有发生改变

测试代码(自定义类):

	HashMap<Integer,News> map = new HashMap<Integer, News>();
	map.put(1, new News(1, "weijie"));
	map.put(2, new News(2, "hexiang"));
	Collection<News> values = map.values();
	for (News news : values) {
		news.id = 5;
	}
	Collection<News> values2 = map.values();
	for (News news : values2) {
		System.out.println(news);
	}

结果: News [id=5, name=weijie]
News [id=5, name=hexiang]
自定义的类不是final类型因此对象内容通过引用后的变量可以对地址空间的内容进行修改。

参考博客:Boolean 源码

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值