java中==和equals的区别

来源:互联网 发布:在淘宝上买书需要什么 编辑:程序博客网 时间:2024/06/02 03:54


1.首先明确一点:“==”可以比较基本数据类型和引用数据类型,.equals()方法是是继承object的一个方法,所以它不能比较基本数据类型,只能比较引用数据类型。

2.然后要知道“==”比较基本数据类型和比较引用数据类型的区别,比较基本数据类型是比较的数值,而比较引用数据类型是比较的对象的地址。

3..equals()方法比较引用数据类型与“==”区别在于,.equals()方法方法比较灵活,可以对它进行重写,如果不进行重写,那么两者没有任何区别,可通过object的equals()方法的源码进行解释:

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

4.下面用两个例子进行说明重写与不重写equals()方法的区别:

public class Test {public static void main(String[] args) {Integer a1 = new Integer(2);Integer a2 = new Integer(2);System.out.println(a1==a2); System.out.println(a1.equals(a2));}}

此时,a1和a2是两个引用数据类型,比较的是对象的地址,用输出语句输出(a1==a2),结果明显为false,但a1和a2中的存储的值明显是相等的,a1不等于a2又不符合逻辑,这时Integer 类对equals()方法进行了重写,比较的是两者的值的大小,所以结果为true,具体的源码可以到api文档进行查看。常见的重写了equals()方法的类有:八种基本数据类型的包装类和String类,集合类等。

public class Test {public static void main(String[] args) {Person p1 = new Person();Person p2 = new Person();System.out.println(p1==p2);System.out.println(p1.equals(p2));}}class Person {}

新建一个普通类,用类创建了两个对象,由于没有重写equals()方法,当使用“==”和equals()方法时,输出结果都为false。

原创粉丝点击