目录
1. == 操作符
== 操作符在Java中用于比较两个变量的值是否相等。但是,它比较的方式依赖于操作数的类型:
-
对于基本数据类型(如int, char, boolean等):
==比较的是值是否相等。 -
对于引用数据类型(如对象):
==比较的是两个变量是否指向内存中的同一个对象(即它们的内存地址是否相同)。如果两个对象引用指向同一个对象,则==返回true;否则返回false。
2. equals() 方法
equals() 是 Object 类的一个方法,用于比较两个对象的内容是否相等。默认情况下,Object 类的 equals() 方法实现与 == 操作符在比较引用类型时相同,即比较两个对象的引用是否指向同一个对象。但是,许多Java类(如 String, Integer, Double 等包装类)都重写了 equals() 方法,以提供基于对象内容的比较,而不是基于引用。
-
重写后的
equals()方法:通常,当我们创建自己的类时,如果希望基于对象的内容而不是引用来比较对象,我们需要重写equals()方法。此外,按照惯例,如果重写了equals()方法,也应该重写hashCode()方法,以保持hashCode()的一般约定,即相等的对象必须具有相等的哈希码。
3. 区别总结
-
==:-
对于基本数据类型,比较的是值。
-
对于引用数据类型,比较的是引用(即内存地址)。
-
-
equals():-
默认情况下,比较的是引用(与
==在引用类型上的行为相同)。 -
但许多类(如字符串、包装类)都重写了此方法,以提供基于内容的比较。
-
如果你的类需要基于内容的比较,你应该重写
equals()方法。
-
4. 示例
String s1 = new String("hello");
String s2 = new String("hello");
String s3 = s1;
System.out.println(s1 == s2); // false,因为s1和s2指向不同的对象
System.out.println(s1.equals(s2)); // true,因为s1和s2的内容相同
System.out.println(s1 == s3); // true,因为s1和s3指向同一个对象
在这个例子中,== 在比较 s1 和 s2 时返回 false,因为它们指向的是不同的对象,尽管它们的内容相同。而 equals() 方法在比较 s1 和 s2 时返回 true,因为 String 类重写了 equals() 方法以提供基于内容的比较。

3万+

被折叠的 条评论
为什么被折叠?



