String竟然可以用==比较!?

最近在做测试是遇到下面一段代码:


if((m_strRound == "up") && (fExecute)){ //切り上げ
bdValue = bdValue.setScale(nLength, BigDecimal.ROUND_UP);
}else if ((m_strRound == "down") && (fExecute)){ //切り捨て
bdValue = bdValue.setScale(nLength, BigDecimal.ROUND_DOWN);
}


当时想都没想,直接提bug了。

结果跟测试式样书作成者一确认,在这段代码的类里面添加了main函数跑了一下,惊奇的发现,m_strRound设置为“up”或“down”的时候,程序竟然能够跑到分支里去。
写java程序也有两三年了,脑子里面有个根深蒂固的条律就是:比较String一定得用equals方法。但这里竟然使用==比较,并且成功了!?

非常不解,因此到google了一下,发现已经有很多人讨论并解释了这个问题,如下:
[url]http://www.51ria.com/blog/?p=37l[/url]

恍然大悟!
但问题并没就此结束,虽然在我写的main方法里测试时,==有效。但当我在画面上(我们的工程是一个struts工程)输入m_strRound为“up”时,却没有跑出来期待的结果,通过打log发现,此时==就不管用了。
因此推断,struts将换面上的“ up”设置到form中时,可能是通过new String("up")生成的,反正跟后台代码中的“up”字符串的内存地址不同,所以==就不好使了。程序还是有bug,并且就是==号引起的。

看来,条律是对的,即使==在某些情况下是有效地,也不要使用它。因为它很有可能会带来bug,并且影响可读性。
最终判定,上面那段代码很烂!!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值