zoukankan      html  css  js  c++  java
  • 【Java】关于Java中不能使用==检测字符串相等的问题

    一定不要使用 == 检测两个字符串是否相等!

    == 这个运算符只能够确定两个字符串是否放置在同一个位置(地址)上。

    如果两个字符串放置在同一个位置上,它们必然相等。

    但是完全有可能将内容相同的多个字符串的拷贝位置放在不同的位置上。

    比如 str1 = "Hello",str2 = "Hello",但是两个字符串地址不同,那么 == 将返回 false。

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

    如果始终将相同的字符串共享,就可以使用==检测是否相等。

    但实际上只有字符串常量是共享的,而 + 或 substring 等操作产生的结果并不是共享的。

    因此,千万不要使用 == 检测字符串的相等性。不然很容易出现bug。


    Java中检测字符串相等可以用以下的方法:

    • equals方法:检测两个字符串是否相等。
    public boolean equals(Object anObject)  

    将此字符串与指定的对象比较。当且仅当该参数不为 null,并且是与此对象表示相同字符序列的 String 对象时,结果才为 true。  
    如s.equals(t),如果字符串s与t相等,返回true;否则返回false。
    可以是字符串变量,也可以是字符串字面量。如"Hello".equals(greeting)是合法的。

    • equalsIgnoreCase方法:检测两个字符串是否相等,不区分大小写。
    public boolean equalsIgnoreCase(String anotherString)

    检测两个字符串是否相等,而不区分大小写。如 "Hello".equalsIgnoreCase("hello")  。

    • compareTo方法:与C语言中的strcmp完全类似。
    public int compareTo(String anotherString)

    按字典顺序比较两个字符串。该比较基于字符串中各个字符的 Unicode 值。按字典顺序将此 String 对象表示的字符序列与参数字符串所表示的字符序列进行比较。如果按字典顺序此 String 对象位于参数字符串之前,则比较结果为一个负整数。如果按字典顺序此 String 对象位于参数字符串之后,则比较结果为一个正整数。如果这两个字符串相等,则结果为 0;compareTo只在方法 equals(Object) 返回 true 时才返回0。可以这样使用:if (greeting.compareTo("Hello") == 0) ......

    • compareToIgnoreCase方法:跟上面的compareTo一样,只是不区分大小写。
    public int compareToIgnoreCase(String str)

    参考:

    Java核心技术 卷I - 基础知识(原书第10版)

    Java™ Platform Standard Edition 6 的 API 规范

  • 相关阅读:
    SecureCRT乱码问题简单的解决办法
    安家博客园,开始java web 之旅
    Java Service Wrapper使用心得
    vsftp折腾
    mysql更改数据库表名称和svnerve启动版本库命令、执行jar命令
    Linux 命令积累2
    二进制与十进制的转换
    java Map代替List在for循环中的应用
    Optional 的应用
    java Date、java.sql.Date、localTime、SimpleDateFormat的格式及应用
  • 原文地址:https://www.cnblogs.com/ME-WE/p/12433602.html
Copyright © 2011-2022 走看看