Java中使用==比对整数值转换的两个String为何返回false
代码错误原因及修复方案
核心错误点
- 误用
==运算符比对String类型的内容,不符合Java的语法规则。
原理说明
Java中
==运算符的比对逻辑分两类场景:
- 作用于基础数据类型(int、long、char等)时,比对的是变量存储的数值是否相等
- 作用于引用数据类型(包括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
相关产品推荐
相关产品推荐

