Java中拆分字符串得到的数组元素为何无法用==判断相等?
Java字符串相等判断的坑:为啥split后的"6"不能用==比较?
Java里用==比较字符串时,和JavaScript的逻辑完全不一样:
==在Java中对引用类型(比如String)比较的是对象的内存地址,不是字符串内容。- 直接写的字符串字面量(比如
"6")会被存入字符串常量池,所以两个相同的字面量用==比较时,指向的是同一个地址,结果为true。 - 但
split()方法生成的字符串是在堆上新建的对象,不会放入常量池,哪怕内容和字面量一样,内存地址也不同,所以==判断会返回false。
解决方法
直接用equals()方法比较字符串内容,这才是Java中判断字符串相等的正确方式:
String sixString = "6 6 6"; String[] contains6 = sixString.split(" "); // 比较数组中两个元素的内容 boolean isSix = contains6[0].equals(contains6[1]); // 结果为true // 用字面量调用equals避免空指针风险 boolean isSixString = "6".equals(contains6[0]); // 结果为true
如果担心contains6[i]可能为null,推荐用字面量来调用equals(),这样即使数组元素是空的,也不会抛出空指针异常。
内容的提问来源于stack exchange,提问作者Andy Simmons
相关产品推荐
相关产品推荐

