【注意】最后更新于 July 9, 2024,文中内容可能已过时,请谨慎使用。
一般来说equals()
和"=="
运算符是用来比较两个对象是否相等,但是这两者之前还是有许多不同:
- 最主要的不同是
.equals()
是方法,==
是运算符。
- 使用
==
来进行引用的比较,指的是是否指向同一内存地址。使用.equals()
来进行对象内容的比较,比较值。
- 如果没有重写
.equals
就会默认调用最近的父类来重写这个方法。
- 示例代码:
1
2
3
4
5
6
7
8
9
10
11
|
// Java program to understand
// the concept of == operator
public class Test {
public static void main(String[] args)
{
String s1 = new String("HELLO");
String s2 = new String("HELLO");
System.out.println(s1 == s2);
System.out.println(s1.equals(s2));
}
}
|
输出:
解释: 这里我们创建了两个对象分别命名为s1
和s2
。
s1
和s2
是指向不同对象的引用。
- 当我们使用
==
来比较s1
和s2
时,返回的是false
,因为他们所占用的内存空间不一样。
- 使用
.equals()
时,因为只比较值,所以结果时true
。
我们来分别理解一下这两者的具体区别:
等于运算符(==)
我们可以通过==
运算符来比较每个原始类型(包括布尔类型),也可以用来比较自定义类型(object types)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
// Java program to illustrate
// == operator for compatible data
// types
class Test {
public static void main(String[] args)
{
// integer-type
System.out.println(10 == 20);
// char-type
System.out.println('a' == 'b');
// char and double type
System.out.println('a' == 97.0);
// boolean type
System.out.println(true == true);
}
}
|
输出:
1
2
3
4
|
false
false
true
true
|
如果我们使用==
来比较自定义类型,需要保证参数类型兼容(compatibility)(要么是子类和父类的关系,要么是相同类型)。否则我们会产生编译错误。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
// Java program to illustrate
// == operator for incompatible data types
class Test {
public static void main(String[] args)
{
Thread t = new Thread();
Object o = new Object();
String s = new String("GEEKS");
System.out.println(t == o);
System.out.println(o == s);
// Uncomment to see error
System.out.println(t==s);
}
}
|
输出:
1
2
3
|
false
false
// error: incomparable types: Thread and String
|
.equals()
在Java中,使用equals()
对于String
的比较是基于String
的数据/内容,也就是值。如果所有的他们的内容相同,并且都是String
类型,就会返回true
。如果所有的字符不匹配就会返回false
。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
public class Test {
public static void main(String[] args)
{
Thread t1 = new Thread();
Thread t2 = new Thread();
Thread t3 = t1;
String s1 = new String("GEEKS");
String s2 = new String("GEEKS");
System.out.println(t1 == t3);
System.out.println(t1 == t2);
System.out.println(t1.equals(t2));
System.out.println(s1.equals(s2));
}
}
|
输出:
1
2
3
4
|
true
false
false
true
|
解释:这里我们使用.equals
方法去检查是否两个对象是否包含相同的值。
- 在上面的例子中,我们创建来3个线程对象和两个字符串对象。
- 在第一次比较中,我们比较是否
t1==t3
,众所周知,返回true的原因是因为t1和t3是指向相同对象的引用。
- 当我们使用
.equals()
比较两个String
对象时,我们需要确定两个对象是否具有相同的值。
String
"GEEKS"
对象包含相同的“GEEK”
,所以返回true
。
本文作者:Bishal Kumar Dubey
译者:xiantang
原文地址:Difference between == and .equals() method in Java
文章作者
xiantang
上次更新
2024-07-09
(9ac8718e)