Java 1.1.4 检测字符串是否相等

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

 s.equals(t) 

如果字符串 s 与字符串 t 相等, 则返回 true ; 否则, 返回 false。

2.需要注意,s与 t 可以是字符串变量, 也可以是字符串字面量。例如,下列表达式是合法的:

"Hello".equals(greeting) 

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

"Hello".equalsIgnoreCase("hello")

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

String greeting = "Hello"; //initialize greeting to a string 
if (greeting == "Hello") . . . 
// probably true 
if (greeting.substring(0, 3) == "Hel") . . . 
// probably false

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

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

 if (greeting.compareTo("Hel1oH) === 0} . . . 

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

猜你喜欢

转载自blog.csdn.net/weixin_45884316/article/details/107639510