Java中字符串的比较

一定要谨记,字符串不是基本的数据类型!!!

可以使用equals方法检测两个字符串是否相等。对于表达式:

s.equals(t);

如果字符串s与字符串t相等,则返回true;否则,返回false。需要注意,s与t可以是字符串变量,也可以是字符串字面量。例如,下列表达式是合法的:

"Hello".equals("hello");

要想检测两个字符串是否相等,而不区分大小写,可以使用equalsIgnoreCase方法。

"Hello".equalsslgnoreCase("hello");

一定不要使用==运算符检测两个字符串是否相等!这个运算符只能够确定两个字符串是否放置在同一个位置上。当然,如果字符串放置在同一个位置上,它们必然相等。但是,完全有可能将内容相同的多个字符串的拷贝放置在不同的位置上。

如果虚拟机始终将相同的字符串共享,就可以使用==运算符检测是否相等。但实际上只有字符串常量是共享的,而+或substring等操作产生的结果并不是共享的。因此,千万不要使用==运算符测试字符串的相等性,以免在程序中出现糟糕的bug。从表面上看,这种bug很像随机产生的间歇性错误。

C++注释:对于习惯使用C++的string类的人来说,在进行相等性检测的时候一定要特别小心。C++的string类重载了==运算符以便检测字符串内容的相等性。可惜Java没有采用这种方式,它的字符串“看起来、感觉起来”与数值一样,但进行相等性测试时,其操作方式又类似于指针。语言的设计者本应该像对+那样也进行特殊处理,即重定义==运算符。当然,每一种语言都会存在一些不太一致的地方。

C程序员从不使用==对字符串进行比较,而使用strcmp函数。Java的compareTo方法与strcmp完全类似,因此,可以这样使用:

不过,使用equals看起来更为清晰。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180304G11EUP00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券