==是一个比较运算符
- ==既可以比较判断基本类型,也可以判断引用类型。
- 如果判断的是基本类型,那么判断的是值是否相等。
- 如果判断的是引用类型,那么判断的地址是否相等,即比较的是对象的内存地址。
public class Test01 {
public static void main(String[] args) {
A a = new A();
A b = a;
B b1 = a; //父类的引用指向子类的对象
System.out.println(a == b); //true
System.out.println(a==b1); //true
System.out.println(b==b1); //true
int num1 = 10;
double num2 = 10.0;
System.out.println(num1==num2); //true
}
}
class A extends B{
}
class B {
}
equals()方法
- 是
Object
类中的方法,只能判断引用类型 - 默认判断的是地址是否相等,子类中往往重写该方法,用于判断内容是否相等,如
String
、Interger
。
equals()
方法存在两种使用情况:
1.类没有覆盖该方法。通过equals()
来比较该类的两个对象时,等价于通过"==" 比较这两个对象,使用的是Object
类中的equals()
方法。源码如下:
public boolean equals(Object obj) {
return (this == obj);
}
2.类覆盖了该方法。一般我们都通过覆盖equals()
来比较两个对象中的属性是否相等,若他们的属性相等,则返回true。
public class Test02 {
public static void main(String[] args) {
String s = new String("rqt");
String s1 = new String("rqt");
System.out.println(s == s1); //false
System.out.println(s.equals(s1)); //true
String a = "hello world"; //放在常量池中
String b = "hello world"; //从常量池中去取
System.out.println(a==b); //true
System.out.println(a.equals(b)); //true
}
}