Java-Note-String中的"=="与"equals()
作者:
1nfinity | 来源:发表于
2018-11-19 16:03 被阅读0次
- "=="比较的是两个引用变量是否指向同一个对象
- "equals()"方法比较的内容是自定义的, 自己写的类可以自定义"equals()", 只是在Object/String等类中默认已经帮我们写好了, 默认的"equals"比较的是具有实际意义的值, 比如两个String的字面量是否相等
- 对String的比较而言, 比较两个字符串字面量是否相等最好是使用"equals()", 而不是用"=="来比较两个字符串是否指向同一个对象
- 举例说明"=="和"equals()"在String中的差别:
public class StringEqualTest {
public static void main(String[] args) {
String a = "test";
String b = "test";
String c = new String("test");
String d = new String("test");
System.out.println(a == c);
System.out.println(c == d);
System.out.println(a == b);
System.out.println(a.equals(c));
System.out.println(c.equals(d));
System.out.println(a.equals(b));
}
}
输出:
false
false
true
true
true
true
-
a == c
为false
, a.equals(c)
为true
, 原因是a与c的实际值相等, 但它们并不是引用的同一个对象, c与d的比较也一样
-
a == b
为true
是因为根据Java虚拟机规范, 字符串类型的常量被作为字面量(string literal)保存在方法区中的运行时常量池中, 且内容相同的字面量必须引用相同的实例
- 参考文献
- https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-5.html#jvms-5.1
- https://stackoverflow.com/questions/513832/how-do-i-compare-strings-in-java
本文标题:Java-Note-String中的"=="与"equals()
本文链接:https://www.haomeiwen.com/subject/pjhafqtx.html
网友评论