8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

如何在 Java 中比较字符串?

Juraj 1月前

121 0

到目前为止,我一直在程序中使用 == 运算符来比较所有字符串。但是,我遇到了一个错误,将其中一个改为 .equals(),这样就修复了错误。== 不好吗?什么时候应该...

,我一直 == 在程序中使用运算符来比较所有的字符串。但是,我遇到了一个错误,将其中一个改为 .equals() ,然后修复了这个错误。

== 好吗?什么时候应该使用,什么时候不应该使用?有什么区别?

帖子版权声明 1、本帖标题:如何在 Java 中比较字符串?
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由Juraj在本站《eclipse》版块原创发布, 转载请注明出处!
最新回复 (0)
  • == 测试引用相等性(它们是否是同一个对象)。

    .equals() 测试值是否相等(它们是否包含相同的数据)。

    Objects.equals() 在调用之前 null 会进行检查 .equals() ,因此您不必这样做(从 JDK7 开始可用,在 Guava )。

    因此,如果你想测试两个字符串是否具有相同的值,你可能需要使用 Objects.equals() .

    // These two have the same value
    new String("test").equals("test") // --> true 
    
    // ... but they are not the same object
    new String("test") == "test" // --> false 
    
    // ... neither are these
    new String("test") == new String("test") // --> false 
    
    // ... but these are because literals are interned by 
    // the compiler and thus refer to the same object
    "test" == "test" // --> true 
    
    // ... string literals are concatenated by the compiler
    // and the results are interned.
    "test" == "te" + "st" // --> true
    
    // ... but you should really just call Objects.equals()
    Objects.equals("test", new String("test")) // --> true
    Objects.equals(null, "test") // --> false
    Objects.equals(null, null) // --> true
    

    来自 Java 语言规范 JLS 15.21.3. Reference Equality Operators == and != :

    虽然 == 可用于比较 类型的引用 String ,但这种相等性测试可确定两个操作数是否引用同一 String 对象。结果是, false 如果操作数是不同的 String 对象,即使它们包含相同的字符序列( §3.10.5 , §3.10.6 可以通过方法调用测试 s t 的内容 s.equals(t) .

    你几乎总是使用 Objects.equals() 。在 极少数 情况下,你 知道 你正在处理 内部 字符串,你 可以 使用 == .

    来自 JLS 3.10.5. String Literals :

    此外,字符串文字始终引用 类的 同一 String 值的字符串 §15.28 )是“驻留的”,以便使用方法共享唯一实例 String.intern .

    中也可以找到类似的例子 JLS 3.10.5-1 .

    其他可考虑的方法

    String.equalsIgnoreCase() 忽略大小写的值相等性。但请注意,此方法在各种与语言环境相关的情况下可能会产生意外结果,请参阅 此问题 .

    String.contentEquals() 将 的内容 String 与 any 的内容 CharSequence (自 Java 1.5 开始可用)。这样您就不必在进行相等性比较之前将 StringBuffer 等转换为 String,而将空值检查留给您。

返回
作者最近主题: