String string1 = "Hi there";
String string2 = "Hi";
String string3 = "Hi";
System.out.println(string1.substring(0, string2.length()) == string2); //1
System.out.println(string1.substring(0, string2.length()).equals(string2)); //2
System.out.println(string1.substring(0, string2.length()).compareTo(string2)); //3
System.out.println(string2 == string3); //4
System.out.println(string2.substring(0) == string3); //5
System.out.println(string2.substring(0) == string3.substring(0)); //6
Run Code Online (Sandbox Code Playgroud)
给我输出:
false
true
0
true
true
true
Run Code Online (Sandbox Code Playgroud)
我真的不明白第一行,为什么它给我假?
如果我向字符串2添加一个空格,这行我得到假,但如果我没有添加空格,我会得到:
System.out.println(string2.substring(0, string3.length()) == string3);
Run Code Online (Sandbox Code Playgroud)
为什么第1行给我假,但第6行是真的,但是如果我给string2添加一个空格,那就错了..
谢谢=)
Jea*_*ash 14
那里发生了几件事.
当您声明两个字符串等于"Hi"时,java会将其优化为引用相同的字符串对象(因此它不必存储两次相同的字符串).
"=="比较参考文献.在第1行中使用substring时,创建的字符串对象具有与string2不同的引用.
在第6行中,我想substring(0)有一个优化,它知道它只能返回原始字符串,因此这些引用是相等的.
如果你想比较字符串,那么你应该使用String.equals()(或String.equalsIgnoreCase())方法.比较时==只告诉您两个引用是否指向同一个对象.在你的例子中就是这样:string2和string3指向同一个字符串实例"Hi"(为什么Java应该在编译时创建两个完全相同的字符串)
| 归档时间: |
|
| 查看次数: |
1999 次 |
| 最近记录: |