浅谈Java中equals()和”==”的区别(java1)

简单地说,"=="比较的是两者的地址,而equals比较的是两者像不像,即两者的特征是不是一样。

看下面的例子:

public class T {
	int a,b;
	public T(int a , int b){
		this.a = a;
		this.b = b;
	}
	public static void main(String[] args) {
		T t1 = new T(10, 20);
		T t2 = new T(10, 20);
		System.out.println(t1==t2);
	}
}

 

我们可以看到类T实例了两个对象t1,t2,我们用画图来分析:

可以看到t1,t2指向的是不同的对象,所以他们用"=="来比较的话,两者肯定是不相等的,所以输出结果为false。

但是如果我们在这个类中调用equals()方法,返回值也是false。因为这个equals()方法是object提供的,而object提供的equals()方法如下图:

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

 

可以看到,object提供的equals()就是用双等于来比较的,所以我们在自己定义的类中需要重写equals()方法,重写后的equals()方法和整个类如下图:

package com.zjl;

public class T {
	int a,b;
	public T(int a , int b){
		this.a = a;
		this.b = b;
	}
	public boolean equals(Object obj){
		if(obj == null){//如果所给对象的的值为空,则比较结果为false
			return false;
		}
		if(obj == this){//如果所给对象的的值为本身,则比较结果为true
			return true;
		}
		if(obj instanceof T){//判断obj是不是T类型的实例,是的话进行强转,不是返回false
			T p =(T) obj;//我们先把所给对象的类型转换为类的类型
			return this.a==p.a&&this.b==p.b;//进行判断,返回结果
		}
		return false;
	}
	public static void main(String[] args) {
		T t1 = new T(10, 20);
		T t2 = new T(10, 20);
		System.out.println(t1==t2);
		System.out.println(t1.equals(t2));
	}
}

 

 

我们可以看到如果使用equals()方法比较结果为true,而使用"=="判断的结果为false。

import java.util.ArrayList;
import java.util.List;

public class Collection {
	public static void main(String[] args) {
		List<Integer> text1 = new ArrayList<Integer>();
		List<Integer> text2 = new ArrayList<Integer>();
		text1.add(5);
		text2.add(5);
		System.out.println("用equals比较:"+text1.equals(text2));
		System.out.println("用==比较:"+(text1 == text2));
	}
}

输出结果为:

用equals比较:true
用==比较:false

 

---------------------------------------------------------------(很有教养的一条分界线)

第一次写文章,有很多需要指正的地方,希望大家在下面留言和指正,一起进步。

 

打赏
点赞
  1. 1说道:

    受益匪浅 :smile:

  2. Jamey Greek说道:

    What’s Taking place i’m new to this, I stumbled upon this I’ve found It positively useful and it has aided me out loads. I am hoping to contribute & help different customers like its helped me. Good job.

发表评论

在发表评论前请确认您的言论中没有违反中国各项法律、法规和违背社会道德的内容。任何无意义的留言内容都会被直接删除。