浏览 1483 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2010-09-10
最后修改:2011-06-06
简单的一个布尔值装箱,都有可能是bug的根源。 Code review的时候,发现一段代码如下: Boolean isNeedProxy = (Boolean)threadLocalMap.get(ip); return ( isNeedProxy == Boolean.TRUE ) ? true : false; 我的猜想是编程的人为了防止isNeedProxy为null,所以有了这段代码。 这里有个问题。如果存储的值是new出来的Boolean,那么这里的逻辑就是错的。 Boolean b = new Boolean("true"); Assert.assertFalse(b == Boolean.TRUE); 发现了这个问题,改正起来当然是比较容易的。 return isNeedProxy==null?false:isNeedProxy; 本来故事到了这里就结束了,但是,仔细想想,对于这种比较细微的代码级别问题,别人一样是很容易犯错的。还是应该把这个细微的东西封装起来比较好。 代码如下: private Map<String, Boolean> map = new HashMap<String, Boolean>(); public void put(String key, boolean value) { map.put(key, value); } public boolean getValue(String key) { Boolean value = map.get(key); if (value == null) { return false; } return value.booleanValue(); } 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2010-09-10
最后修改:2010-09-10
BooleanUtils.toBoolean(Boolean.TRUE) = true BooleanUtils.toBoolean(Boolean.FALSE) = false BooleanUtils.toBoolean(null) = false BooleanUtils.isTrue(Boolean.TRUE) = true BooleanUtils.isTrue(Boolean.FALSE) = false BooleanUtils.isTrue(null) = false 要看你的业务语义来决定用哪个. |
|
返回顶楼 | |
发表时间:2010-09-10
最后修改:2010-09-10
抛出异常的爱 写道 BooleanUtils.toBoolean(Boolean.TRUE) = true BooleanUtils.toBoolean(Boolean.FALSE) = false BooleanUtils.toBoolean(null) = false BooleanUtils.isTrue(Boolean.TRUE) = true BooleanUtils.isTrue(Boolean.FALSE) = false BooleanUtils.isTrue(null) = false 要看你的业务语义来决定用哪个. 对。 这里的语义是false. 这里主要强调的是对Boolean不能想当然的用==. |
|
返回顶楼 | |