1、 == :作用是判断两个对象的地址是否相等,相等的话返回true。或者说两个对象是不是同一个对象。
① 如果变量的类型是基本数据类型,则比较是值,比如:int a = 2;int b=2; a== b。
② 如果比较的是引用数据类型,则比较的是对象内存地址是否一样,一样返回的true,不一样返回的是false
2、 equals:作用是判断两个对象是否相等。有两种情况:
① 如果类没有重写equals()方法,则比较的是两个对象是不是同一个对象,等价于 == 比较两个对象,比较的是两个对象的地址是否一样
② 如果类重写了equals()方法,则比较的是两个对象的值是否相等;若两个对象内容一样,返回true;若对象内容不一样,返回的false;
为什么重写equals方法后,必须要重写hashcode方法?
具体看这边彻底搞懂:https://blog.csdn.net/Sunshineoe/article/details/115326777
代码演示:
package com.it.stack;
// 删除链表中重复的元素
public class DeleteSameYuanSu {
public static void main(String[] args) {
String a = new String("a");
String b = new String("b");
String c = new String("c");
String d = new String("c");
String aa = "aa";
String bb = "aa";
System.out.println(a == b); // false,比较的是两个对象的地址,显然是两个对象不同的地址
System.out.println(a.equals(b)); // String 中equals已经被重写 ,比较的是a对象和b对象的值,显然不一样,false
System.out.println(aa == bb); // true 比较的值
System.out.println(aa.equals(bb)); // true 比较的是对象的值
System.out.println(c.equals(d)); // 对象的内容相等 比较的是对象的值
}
}
注意:
String 中的equals方法是重写过的,object的equals是比较的是对象的内存地址,String比较的是对象的值。当创建String对象的时,虚拟机JVM会在常量池中查找有没有已经存在的值和要创建的值相同的对象,如果有就赋值给当前对象引用,否则在常量池中重新创建一个String对象。就是创建之前在常量池中先检查有没有和String要创建对象相同的,有就拿来用,没有就创建。
扫描二维码关注公众号,回复:
13130431 查看本文章