日期:2014-05-20  浏览次数:20734 次

我们爱分享----Java toLowerCase()/toUpperCase()方法的使用注意
说明:如果大家写的代码涉汲到国际化的话,就看下去。如果想了解也可以看下去。 

大家看下如下代码,我们在运行时,会是一个什么样的结果: 
 
肯定有人说,这个肯定是true…没错,一般人想到这个肯定是true,但是…我们看看toUpperCase()(或toLowerCase(),下文件只说其中一个方法了)方法的源代码: 

注意,这里调用了一个带Locale的重载方法,于是我们再看以下代码: 

这个时候,运行的结果相信大家都能看得出来,是一个false,tr是土耳其的语言代码(至少在没有土语的机器上会不一样,还有其它地区的语言在返回时不是直接转成大写的,还加了一些特殊的符号),如果不幸,你写的程序正在这些地区运行,那就会得到一个错误的结果,甚至于你连错误的地方都找不到,很容易忽略它。因此我们在使用toLowerCase()方法时,尽量使用toLowerCase(Locale.US)这个方法来代替(或使用equalsIgnoreCase()方法来比较),这样就不会因为在不同语言的机器上出现一些让人莫名其妙的问题了。 

如果大家使用过findbugs的话,会发现凡是使用toLowerCase()的地方,findbugs都会有警告提示的,我开始在修改findbugs时(XX公司要求外包项目静态检查结果一定要清零),不明所以,直接就将toLowerCase(Locale.getDefault())搬出来了,今天看到这样的说明惊得一身冷汗,幸好….幸好….



------解决方案--------------------
以前完全没注意的地方
------解决方案--------------------

------解决方案--------------------
查询条件都加tolowercase,如果查询条件是中文的话,还真会有问题。。
------解决方案--------------------
恩,确实是有这样一个情况,谢谢楼主分享,已推荐,可用分已转,请查收。

谢谢你的大力支持
------解决方案--------------------
楼主好强大。
------解决方案--------------------
很好,很厉害。
------解决方案--------------------
谢谢分享~
------解决方案--------------------
楼主 厉害 !!
------解决方案--------------------
不错 不错!
------解决方案--------------------
楼主好样的 值得学习 +10
------解决方案--------------------
这个平时还真没注意, 学习到了!
------解决方案--------------------
++1