You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Studio中Java字符串==比较结果异常原因咨询

为什么内容相同的字符串用==比较返回false?

这是Java里非常常见的新手误区,我给你把这个事儿说透:

在Java中,String属于引用类型,和int、boolean这类基本数据类型不一样。当你用==比较引用类型时,它根本不会去看字符串的实际内容——它比较的是两个对象在内存中的引用地址。

你调试时看到TakeText="WoW"、Text1="WoW",但这俩字符串大概率是不同的对象实例:

  • TakeText是通过startBox.getText().toString()得到的,这个方法会在堆内存里生成一个新的String对象,它的引用指向这个新位置
  • Text1如果是直接用双引号定义的常量,它的引用会指向Java的字符串常量池里的位置;哪怕不是常量,只要和TakeText的创建路径不同,引用地址就可能不一样

所以哪怕内容完全一致,只要它们的内存引用地址不重合,==就会返回false。

正确的字符串内容比较方式

要比较字符串的实际内容,你得用专门的方法:

  1. 使用equals()方法:这是String类原生用来比较内容的方法
    if (marker == null && TakeText.equals(Text1)) { ... }
    
    要是TakeText有可能为null,建议把常量放前面,避免空指针异常:
    if (marker == null && Text1.equals(TakeText)) { ... }
    
  2. 使用Objects.equals()(Java 7及以上可用):这个方法会自动处理null的情况,不用额外担心空指针
    import java.util.Objects;
    // ...
    if (marker == null && Objects.equals(TakeText, Text1)) { ... }
    

补充:为啥有时候==又能生效?

如果两个字符串都是直接用双引号声明的常量(比如String a = "WoW"; String b = "WoW";),这时候a == b会返回true——因为Java会把字符串常量放进字符串常量池,相同内容的常量会复用同一个引用。但只要是通过new String()、toString()(部分场景)等方式创建的字符串,就会在堆内存生成新对象,==就失效了。

内容的提问来源于stack exchange,提问作者Mark Caveneau

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:32:06