equals和==比较

1
2
3
public boolean equals(Object obj) {
return (this == obj);
}

由equals的源码可以看出这里定义的equals与==是等效的;不同的原因就在于有些类(像String、Integer、Date等类)对equals进行了重写。

equals

  • 基本数据类型:没有equal方法;
  • 引用数据类型:因为String,八种基本数据类型的包装类都覆写了equals方法,因此equals比较的是内容;其他引用数据类型如果没有覆写equals方法,则判断是否指向同一个引用。

“==”


  • 基本数据类型:判断值是否相等;
  • 引用数据类型:判断是否指向同一个引用(堆内存地址)。

“==”比”equals”运行速度快,因为只是比较引用。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public class StringDemo {
public static void main(String args[]) {
//String s="abce"是一种非常特殊的形式,和new 有本质的区别。
String str0 = "Hello"; // 放在常量池中
String str1 = "Hello"; // 从常量池中查找
String str2 = new String("Hello");
String str3 = str2; // 引用传递
System.out.println(str1 == str2); // false
System.out.println(str1 == str3); // false
System.out.println(str2 == str3); // true
System.out.println(str1.equals(str2)); // true
System.out.println(str1.equals(str3)); // true
System.out.println(str2.equals(str3)); // true

//基本数据类型:"==">>比较值
int a1=1;double b1=1.0;
System.out.println(a1==b1); //true值相等

//包装类
????
}
}
-------------本文结束感谢您的阅读-------------