Java-“equals” 与 “==”详解
前言
本博主将用CSDN记录软件开发求学之路上亲身所得与所学的心得与知识,有兴趣的小伙伴可以关注博主!
也许一个人独行,可以走的很快,但是一群人结伴而行,才能走的更远!让我们在成长的道路上互相学习,欢迎关注!
上篇博文:Java-多线程的使用
“equals” 与 “==”
1. “==” 的使用
1.1 概述
⭕ 用于基本类型比较值时:只要两个变量的值相等,即为
true
。
⭕ 用于引用类型比较引用(是否指向同一个对象)时,比较两个对象的地址值是否相同,即两个引用是否指向同一个对象实体,只有指向同一个对象时,
==
才返回true
。
⭕ 用“
==
”进行比较时,符号两边的数据类型必须兼容(可自动转换的基本数据类型除外),否则编译出错。
1.2 代码演示
演示一:
//基本数据类型
int i = 10;
int j = 10;
double d = 10.0;
System.out.println(i == j);//true
System.out.println(i == d);//true
char c = 10;
System.out.println(i == c);//true
char c1 = 'A';
char c2 = 65;
System.out.println(c1 == c2);//true
演示二:
String str1 = new String("嘻嘻");
String str2 = new String("嘻嘻");
System.out.println(str1 == str2);//false
演示三:
int i = 10;
boolean b = true;
// System.out.println(i == b);
// 报错: Operator '==' cannot be applied to 'int', 'boolean'
2. “equals” 的使用
2.1 概述
⭕ 是一个方法,而非运算符。
⭕ 只能适用于引用数据类型。
⭕
Object
类中equals()
的定义:
public boolean equals(Object obj) { return (this == obj); }
说明:
Object
类中定义的equals()
和==
的作用是相同的:比较两个对象的地址值是否相同.即两个引用是否指向同一个对象实体。
⭕ 像
String
、Date
、File
、包装类等都重写了Object
类中的equals()
方法。重写以后,比较的不是两个引用的地址是否相同,而是比较两个对象的”实体内容”是否相同。
⭕ 通常情况下,我们自定义的类如果使用
equals()
的话,也通常是比较两个对象的”实体内容”是否相同。那么,我们就需要对Object
类中的equals()
进行重写,重写的原则:比较两个对象的实体内容是否相同。
2.2 代码演示
演示一:
Person p1=new Person();
Person p2=new Person();
System.out.println(p1.equals(p2));//false
//Person为自定义的类,没有对equals()进行重写
String str1 = new String("小老师ir");
String str2 = new String("小老师ir");
System.out.println(str1.equals(str2));//true
Date date1 = new Date(32432525324L);
Date date2 = new Date(32432525324L);
System.out.println(date1.equals(date2));//true
演示二:
public class Customer {
private String name;
private int age;
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Customer other = (Customer) obj;
if (age != other.age)
return false;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
return true;
}
}
3. “==” 和 “equals” 的区别
3.1 概述
⭕
==
既可以比较基本类型也可以比较引用类型。对于基本类型就是比较值,对于引用类型就是比较内存地址。
⭕
equals
的话,它是属于java.lang.Object
类里面的方法,如果该方法没有被重写过默认也是==
;我们可以看到String
等类的equals()
方法是被重写过的,而且String
类在日常开发中用的比较多,久而久之,形成了equals
是比较值的错误观点。
⭕ 具体要看自定义类里有没有重写
Object
的equals()
方法来判断。
⭕ 通常情况下,重写
equals
方法,会比较类中的相应属性是否都相等。
3.2 代码演示
int it = 65;
float fl = 65.0f;
System.out.println(“65和65.0f是否相等?” + (it == fl)); //true
char ch1 = 'A';
char ch2 = 12;
System.out.println("65和'A'是否相等?" + (it == ch1));//true
System.out.println(“12和ch2是否相等?" + (12 == ch2));//true
String str1 = new String("hello");
String str2 = new String("hello");
System.out.println("str1和str2是否相等?"+ (str1 == str2));//false
System.out.println("str1是否equals str2?"+(str1.equals(str2)));//true
System.out.println(“hello” == new java.util.Date()); //编译不通过
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/156819.html