前言:学完就忘怎么办?复习呗,qaq。本文章是我个人对javase基础的复习(汗),一天复习一点点,奥利给!

==与equals的区别

This article is written in 2020-5-7.

在Object类下(普通类),==和equals并没有什么区别,都是判断是否是同一个对象。

举例: 可以看得来==和equals并没有什么区别。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
public class Test{
String name;
public Test(){

}
public Test(String name){
this.name = name;
}
public static void main(String[]args){
Test t1 = new Test("好");
Test t2 = t1; //将t2指向t1,使t2和t1指向同一个对象
Test t3 = new Test("好"); //t3指向一个新的对象
//虽然t1和t3的内容相同,但是并不是一个对象。所以打印结果为:false;
System.out.println("==: t1和t2是否同一个对象:"+t1==t2);
System.out.println("==: t1和t3是否同一个对象:"+t1==t3);
System.out.println("equals: t1和t2是否同一个对象:"+t1.equals(t2));
System.out.println("equals 1和t3是否同一个对象:"+t1.equals.(t3));
}
}

控制台输出结果为:
==: t1和t2是否同一个对象:true
==: t1和t3是否同一个对象:false
equals: t1和t2是否同一个对象:true
equals 1和t3是否同一个对象:false

当然你也可以使用==来判断对象的值(内容)是否相同。如上例的t1.name和t3.name是否相同 判断结果肯定是true。

String类中,对equals方法进行了重写。使得equals方法可以用于判断内容是否相同。而==用于判断是否同一个对象(有个特性)。

如下例子:

1
2
3
4
5
6
7
8
9
10
public class Test {
public static void main(String[]args){
String a ="嘿嘿";
String b ="嘿嘿";
String c = new String(a);
System.out.println(a==b);//打印结果为:true
System.out.println(a==c);//打印结果为:false
System.out.println(a.equals(c));//打印结果为:true
}
}
特性:

在引用a和引用b里,字符串的字面值相同。在第六行中使用==判断结果为true,

是因为一般说来,编译器每碰到一个字符串的字面值,就会创建一个新的对象
所以在第3行会创建了一个新的字符串”嘿嘿”,

但是在第4行,编译器发现已经存在现成的”嘿嘿”,那么就直接拿来使用,而没有进行重复创建。(这里可以将字面值当为一个对象理解)

然而第5行虽然字面值和引用a,b相同,但是已经指向了一个新的对象,所以第7行判断结果为false。