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

为什么Java中"00" == "0".repeat(2)的返回结果为false?

问题原因分析

这个问题是Java字符串比较的典型误区,核心是混淆了==运算符和equals()方法的作用:

  • 对于引用类型(比如String类对象),==比较的是两个对象在JVM内存中的引用地址是否相同,并不会判断对象存储的内容是否一致
  • 要对比两个字符串的实际内容,必须调用equals()方法,也就是"00".equals("0".repeat(2))才会返回你预期的true。

为什么内容相同的字符串引用地址不同?

JVM有字符串常量池机制:直接写在代码里的字符串字面量(比如你示例中的"00"、"0")会被存储在常量池中,相同内容的字面量会被复用,节省内存空间。但运行时动态生成的字符串(包括拼接、方法逻辑生成的字符串)默认是在堆内存中新建的独立对象,不会自动加入常量池,因此和常量池中的"00"引用地址不同,==对比自然返回false。

你自定义的repeat方法中,+=拼接字符串的底层是通过StringBuilder完成拼接,最后调用toString()返回的是堆中新创建的字符串对象,和常量池中的"00"不是同一个对象,因此==对比结果也是false。

正确写法示例

public static void main(String[] args) {
    // 对比字符串内容统一使用equals方法,这是Java字符串对比的标准写法
    System.out.println("00".equals(repeat("0",2))); // 输出true
}
public static String repeat(String str, int n) {
    String output = "";
    for (int i = 0; i < n; i++) {
        output += str;
    }
    return output;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 08:09:01