java中“==”和equals的区别

1.“==”是在比较什么?

public static void main(String[] args){
    int a = 1;
    int b = 1;
    System.out.println(a==b);
}

上面这一段输出的是true还是false?

public static void main(String[] args){
    Integer c = new Integer(1);
    Integer d = new Integer(1);
    System.out.println(c==d);
}

这一段呢,true还是false?

结果是这样的

java中“==”和equals的区别_第1张图片


“==”是在比较两个变量的值是否相等。

(1)当两个基本类型的变量(a,b)或者两个基本类型(1,1)的数据进行比较时,用“==”就可以比较出他们是否相等。

(2)当引用变量指向的是一个对象时,引用变量里面存放的其实是对象的地址。引用变量在内存中占用一部分内存,new出来的对象也占用了一部分内存,在上述例子中,引用变量在内存里存放的内容是对象的地址,而对象存放了数据“1”。当c和d用“==”进行比较的时候,实际上是在比较它们是否指向同一个对象。


2.equals又是什么功能呢?

public static void main(String[] args){
	Integer c = new Integer(1);
	Integer d = new Integer(1);
	System.out.println(c.equals(d));
}

这段代码会出什么结果?

java中“==”和equals的区别_第2张图片

这时候你是不是认定equals方法就是用来比较对象的值的呢,嘿嘿,其实不然,大家应该都知道吧,我们在java建的类都会默认继承Object类,而equals方法就是在Object中定义的,那么Object的equals方法是怎么样的呢,附图:


这就是equals在Object中的定义,仔细看看,比较的依旧是它们是否是同个对象,和“==”没区别。

那为什么上面c和d比较是true呢?再看图:

java中“==”和equals的区别_第3张图片

这是因为Integer重写(覆盖)了equals方法。

所以,如果你自己写了个类,要比较你用这个类所创建的两个对象所存放数据的值是否相同,你就要在这个类里面重写(覆盖)equals方法。

你可能感兴趣的:(Java)