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

Java中使用==比对整数值转换的两个String为何返回false

代码错误原因及修复方案

核心错误点

  • 误用==运算符比对String类型的内容,不符合Java的语法规则。

原理说明

Java中==运算符的比对逻辑分两类场景:

  1. 作用于基础数据类型(int、long、char等)时,比对的是变量存储的数值是否相等
  2. 作用于引用数据类型(包括String、数组、自定义类实例等)时,比对的是两个变量指向的内存地址是否为同一个,不会校验对象内部存储的内容

你代码中两次调用String.valueOf(int)会生成两个独立的String对象,存储在堆内存的不同地址,因此用==比对地址的结果自然是false,和两个字符串的内容是否一致无关。

修复方案

如果需要比对两个字符串的内容是否相等,统一使用String类提供的equals()方法,修正后的代码如下:

public class tut4 {
    public static void main(String[] args) {
        int num1 = 1234;
        int num2 = 1234;
        String str_num1 = String.valueOf(num1);
        String str_num2 = String.valueOf(num2);
        // 调用equals方法比对字符串内容
        System.out.println(str_num1.equals(str_num2));
    }
}

补充说明

部分场景下用==比对String也会返回true,比如直接声明String a = "1234"; String b = "1234";,这是因为JVM的String常量池缓存机制让两个变量指向了同一个常量池对象,属于特例,不要依赖该逻辑做字符串比对,所有内容比对场景统一使用equals()才是规范写法。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 17:15:03