Java toLowerCase()/toUpperCase()方法的使用注意

 说明:如果大家写的代码涉汲到国际化的话,就看下去。如果想了解也可以看下去。 

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

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

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

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

说明:这篇文章在2010年11月份发表过,但是现在已经在csdn上找不到了,现在重新发表一次。。。

posted on 2012-02-17 13:02  liangGe_sky  阅读(634)  评论(0编辑  收藏  举报