详细讲解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区别的资料请关注脚本之家其它相关文章!
相关文章
SpringMVC的注解@RequestMapping属性及使用
这篇文章主要为大家介绍了SpringMVC注解@RequestMapping属性及使用,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪2022-05-05
spring boot项目没有mainClass如何实现打包运行
这篇文章主要介绍了spring boot项目没有mainClass如何实现打包运行,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2022-01-01
Java中Velocity快速对变量中的引号特殊字符进行转义
Velocity是一个基于Java的模板引擎,与Freemarker类似,这篇文章主要介绍了Java中Velocity如何对变量中的引号特殊字符进行转义,主要记录一下在使用中碰到的要对引号特殊字符进行转义的问题,需要的朋友可以参考下2023-07-07
mysql+spring+mybatis实现数据库读写分离的代码配置
今天小编就为大家分享一篇关于mysql+spring+mybatis实现数据库读写分离的代码配置,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧2019-03-03


最新评论