字符串长度为 0 但又不等于""是怎么回事呢?

2020-12-26 23:52:14 +08:00
 Frankhong

String s="hello";

String substr=s.substring(5);

System.out.println(substr=="");//打印 false

System.out.println(substr.length()==0);//打印 true

3709 次点击
所在节点    Java
23 条回复
Tubering
2020-12-26 23:59:35 +08:00
substr.equals("");
gainsurier
2020-12-27 00:02:20 +08:00
undefined hhhh
jmc891205
2020-12-27 00:03:23 +08:00
substr 和””是不同的 object
binbinyouliiii
2020-12-27 00:06:33 +08:00
重修 Java
momocraft
2020-12-27 00:08:27 +08:00
jawa 里面对象==是引用相等, equals (一般) 是值相等
tudouxiong
2020-12-27 00:13:37 +08:00
Java 字符串不应该用==比较
Frankhong
2020-12-27 00:25:09 +08:00
Java 里面两个字符串变量需要用 equals 来比较,但是变量和带引号的字符串是可以用==来比较的。并且直接定义一个空字符串,==""是返回 true 的:
String s="";

System.out.println(s=="");//返回 true
Frankhong
2020-12-27 00:26:20 +08:00
为什么在这里==""却返回了 false 呢?
AllenHua
2020-12-27 00:27:23 +08:00
@Frankhong #7 字符串常量池
AllenHua
2020-12-27 00:29:00 +08:00
@AllenHua #9 这条回复 7 楼 ; substr 是 new 出来的 String 对象 reference 不一致 == 比较 肯定是 false
micean
2020-12-27 00:31:18 +08:00
System.out.println(substr=="");//打印 false
System.out.println(substr.intern()=="");//打印 true
Jooooooooo
2020-12-27 00:33:32 +08:00
人和人都是人

但是是不同的个体
nmlgb
2020-12-27 00:35:15 +08:00
你把 c++和 java 搞混了。c++是可以这样的,java 不行。
chrisia
2020-12-27 00:35:18 +08:00
自己看源码,substring 截取的字符串会以 new String 的方式返回,所以为 false 。另外,比较字符串总是用 equals 就不会有问题。
nmlgb
2020-12-27 00:35:59 +08:00
@binbinyouliiii 虽然这是一道很基础的题但我觉得阴阳怪气没有必要。谁没有年轻的时候
binbinyouliiii
2020-12-27 00:39:23 +08:00
@nmlgb #15 阴阳怪气?这词现在这么滥用的吗?
Frankhong
2020-12-27 00:43:11 +08:00
@AllenHua 懂了,String 直接赋字符串和 new String 有区别,谢谢兄弟。
Frankhong
2020-12-27 00:44:09 +08:00
@micean 多谢了。
SingeeKing
2020-12-27 02:23:52 +08:00
Java 不支持运算符重载是真的难受
crayygy
2020-12-27 10:45:40 +08:00
String 有缓存池的,所以直接 == 有时候也是返回 true,但不代表这是正确做法。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/739288

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX