详细讲解Java中==与equals的区别对比
更新时间:2023年09月04日 08:41:37 作者:cool_boy
这篇文章主要为大家详细介绍了Java中==与equals的区别对比,文中有详细的代码示例供大家参考,具有一定的参考价值,感兴趣的同学可以参考阅读下
java == 与 equals 的对比
== 是一比较运算符
- 既可以判断基本类型,又可以判断引用类型。
- 如果判断基本类型,判断的是值是否相等。
int x = 80; double y = 80.0; System.out.println(x==y); //true
- 如果判断引用类型,判断的是地址是否相等,既判断是不是同一个对象。
A a = new A(); A b = a; A c = b; System.out.println(b==c); //ture System.out.println(a==c); //ture B g = a; System.out.println(g==a); //ture class B{ } class A extends B{ }
equals 方法
- 是Object类中的方法,只能判断引用类型。
Object的 equals 源码 public boolean equals(Object anObject) { if (this == anObject) { //如果是同一个对象 return true; //返回true } } 案例 Cat cat1 = new Cat("小花",2); Cat cat2 = new Cat("小花",2); /* Java Object 类是所有类的父类,也就是说 Java 的所有类都继承了 Object,**子类可 以使用 Object 所有方法**。 */ System.out.println(cat1.equals(cat2)); //false 判断是不是同一个对象 class Cat{ private String name; private int age; public Cat(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
- 默认判断的是地址是否相等,既判断是不是同一个对象。子类中往往重写该方法,用于判断内容是否相等。比如( String, Integer)
//把object的equals方法重写了,变成了比较两个字符串值 是否相同 String类的 equals方法 源码 if (anObject instanceof String) { //判断类型 String anotherString = (String)anObject; //向下转型 int n = value.length; if (n == anotherString.value.length) { //如果长度相同 char v1[] = value; char v2[] = anotherString.value; int i = 0; while (n-- != 0) { //然后一个一个的比较字符 if (v1[i] != v2[i]) return false; i++; } return true; //如果两个字符串的所有字符都相等,则返回true } } return false; //如果比较的不是字符串,则直接返回false 案例一: Cat cat1 = new Cat("小花",2); Cat cat2 = new Cat("小花",2); System.out.println(cat1.equals(cat2)); //true class Cat{ private String name; private int age; public Cat(String name, int age) { this.name = name; this.age = age; } //这里重写equals方法 @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; Cat cat = (Cat) o; return age == cat.age && Objects.equals(name, cat.name); } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } } 案例二: String str1 = new String("好好学习"); String str2 = new String("好好学习"); System.out.println(str1.equals(str2)); //true Integer 也重写了object的 equals 方法,变成了判断两个值是否相同 源码 public boolean equals(Object obj) { if (obj instanceof Integer) { return value == ((Integer)obj).intValue(); } return false; } Integer integer1 = new Integer(1000); Integer integer2 = new Integer(1000); System.out.println(integer.equals(integer1)); //true 判断两个值是否相等
以上就是详细讲解Java中==与equals的区别对比的详细内容,更多关于Java ==与equals区别的资料请关注脚本之家其它相关文章!
相关文章
Spring Boot Logging Level设置为off时的Bug
这篇文章主要介绍了Spring Boot Logging Level设置为off时的Bug,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2021-09-09
最新评论