String s="hello";
String substr=s.substring(5);
System.out.println(substr=="");//打印 false
System.out.println(substr.length()==0);//打印 true
1
Tubering 2020-12-26 23:59:35 +08:00
substr.equals("");
|
2
gainsurier 2020-12-27 00:02:20 +08:00
undefined hhhh
|
3
jmc891205 2020-12-27 00:03:23 +08:00 via iPhone
substr 和””是不同的 object
|
4
binbinyouliiii 2020-12-27 00:06:33 +08:00 7
重修 Java
|
5
momocraft 2020-12-27 00:08:27 +08:00
jawa 里面对象==是引用相等, equals (一般) 是值相等
|
6
tudouxiong 2020-12-27 00:13:37 +08:00 via Android
Java 字符串不应该用==比较
|
7
Frankhong OP Java 里面两个字符串变量需要用 equals 来比较,但是变量和带引号的字符串是可以用==来比较的。并且直接定义一个空字符串,==""是返回 true 的:
String s=""; System.out.println(s=="");//返回 true |
8
Frankhong OP 为什么在这里==""却返回了 false 呢?
|
10
AllenHua 2020-12-27 00:29:00 +08:00 via iPhone
@AllenHua #9 这条回复 7 楼 ; substr 是 new 出来的 String 对象 reference 不一致 == 比较 肯定是 false
|
11
micean 2020-12-27 00:31:18 +08:00 1
System.out.println(substr=="");//打印 false
System.out.println(substr.intern()=="");//打印 true |
12
Jooooooooo 2020-12-27 00:33:32 +08:00
人和人都是人
但是是不同的个体 |
13
nmlgb 2020-12-27 00:35:15 +08:00
你把 c++和 java 搞混了。c++是可以这样的,java 不行。
|
14
chrisia 2020-12-27 00:35:18 +08:00
自己看源码,substring 截取的字符串会以 new String 的方式返回,所以为 false 。另外,比较字符串总是用 equals 就不会有问题。
|
15
nmlgb 2020-12-27 00:35:59 +08:00
@binbinyouliiii 虽然这是一道很基础的题但我觉得阴阳怪气没有必要。谁没有年轻的时候
|
16
binbinyouliiii 2020-12-27 00:39:23 +08:00
@nmlgb #15 阴阳怪气?这词现在这么滥用的吗?
|
19
SingeeKing 2020-12-27 02:23:52 +08:00
Java 不支持运算符重载是真的难受
|
20
crayygy 2020-12-27 10:45:40 +08:00 via Android
String 有缓存池的,所以直接 == 有时候也是返回 true,但不代表这是正确做法。
|
21
Ptu2sha 2020-12-27 10:49:28 +08:00
。。。java 学习第一天就是知道字符串比较不是=
|
22
agagega 2020-12-27 20:46:36 +08:00 via iPhone
哈哈哈,Java 一大坑
|
23
lewis89 2020-12-27 20:58:26 +08:00
@SingeeKing #19 有运算符重载才难受,你都不知道你的表达式被人重载成什么样了,我基本上看不到 重载不被滥用的情况,好好的用函数不好吗
|