Java全面細(xì)致講解==和equals的使用
上篇博文:Java-多線程的使用
equals與==
1. ==的使用
1.1 概述
? 用于基本類型比較值時(shí):只要兩個(gè)變量的值相等,即為true。
? 用于引用類型比較引用(是否指向同一個(gè)對(duì)象)時(shí),比較兩個(gè)對(duì)象的地址值是否相同,即兩個(gè)引用是否指向同一個(gè)對(duì)象實(shí)體,只有指向同一個(gè)對(duì)象時(shí),==才返回true。
? 用“==”進(jìn)行比較時(shí),符號(hào)兩邊的數(shù)據(jù)類型必須兼容(可自動(dòng)轉(zhuǎn)換的基本數(shù)據(jù)類型除外),否則編譯出錯(cuò)。
1.2 代碼演示
演示一:
//基本數(shù)據(jù)類型 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); // 報(bào)錯(cuò): Operator '==' cannot be applied to 'int', 'boolean'
2. equals的使用
2.1 概述
? 是一個(gè)方法,而非運(yùn)算符。
? 只能適用于引用數(shù)據(jù)類型。
? Object類中equals()的定義:
public boolean equals(Object obj) { return (this == obj); }
說(shuō)明:Object類中定義的equals()和==的作用是相同的:比較兩個(gè)對(duì)象的地址值是否相同.即兩個(gè)引用是否指向同一個(gè)對(duì)象實(shí)體。
? 像String、Date、File、包裝類等都重寫(xiě)了Object類中的equals()方法。重寫(xiě)以后,比較的不是兩個(gè)引用的地址是否相同,而是比較兩個(gè)對(duì)象的"實(shí)體內(nèi)容"是否相同。
? 通常情況下,我們自定義的類如果使用equals()的話,也通常是比較兩個(gè)對(duì)象的"實(shí)體內(nèi)容"是否相同。那么,我們就需要對(duì)Object類中的equals()進(jìn)行重寫(xiě),重寫(xiě)的原則:比較兩個(gè)對(duì)象的實(shí)體內(nèi)容是否相同。
2.2 代碼演示
演示一:
Person p1=new Person();
Person p2=new Person();
System.out.println(p1.equals(p2));//false
//Person為自定義的類,沒(méi)有對(duì)equals()進(jìn)行重寫(xiě)
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的區(qū)別
3.1 概述
? == 既可以比較基本類型也可以比較引用類型。對(duì)于基本類型就是比較值,對(duì)于引用類型就是比較內(nèi)存地址。
? equals的話,它是屬于java.lang.Object類里面的方法,如果該方法沒(méi)有被重寫(xiě)過(guò)默認(rèn)也是==;我們可以看到String等類的equals()方法是被重寫(xiě)過(guò)的,而且String類在日常開(kāi)發(fā)中用的比較多,久而久之,形成了equals是比較值的錯(cuò)誤觀點(diǎn)。
? 具體要看自定義類里有沒(méi)有重寫(xiě)Object的equals()方法來(lái)判斷。
? 通常情況下,重寫(xiě)equals方法,會(huì)比較類中的相應(yīng)屬性是否都相等。
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()); //編譯不通過(guò)
到此這篇關(guān)于Java全面細(xì)致講解==和equals的使用的文章就介紹到這了,更多相關(guān)Java ==和equals內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Spring Boot如何動(dòng)態(tài)創(chuàng)建Bean示例代碼
這篇文章主要給大家介紹了關(guān)于Spring Boot如何動(dòng)態(tài)創(chuàng)建Bean的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。2017-09-09
Spring配置動(dòng)態(tài)數(shù)據(jù)源實(shí)現(xiàn)讀寫(xiě)分離的方法
這篇文章主要介紹了利用Spring配置動(dòng)態(tài)數(shù)據(jù)源實(shí)現(xiàn)讀寫(xiě)分離的方法,文中通過(guò)示例代碼介紹的很詳細(xì),相信對(duì)大家的理解和學(xué)習(xí)具有一定的參考借鑒價(jià)值,藕需要的朋友可以一起學(xué)習(xí)學(xué)習(xí)。2017-01-01
Spring配置中transactionAttributes的使用方法介紹
這篇文章主要介紹了Spring配置中transactionAttributes的使用方法介紹的相關(guān)內(nèi)容,具有一定參考價(jià)值,需要的朋友可以了解下。2017-09-09
Java中的LinkedHashMap及LRU緩存機(jī)制詳解
這篇文章主要介紹了Java中的LinkedHashMap及LRU緩存機(jī)制詳解,LinkedHashMap繼承自HashMap,它的多種操作都是建立在HashMap操作的基礎(chǔ)上的,同HashMap不同的是,LinkedHashMap維護(hù)了一個(gè)Entry的雙向鏈表,保證了插入的Entry中的順序,需要的朋友可以參考下2023-09-09
SpringBoot之@Value獲取application.properties配置無(wú)效的解決
這篇文章主要介紹了SpringBoot之@Value獲取application.properties配置無(wú)效的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-03-03
解析Java的Jackson庫(kù)中對(duì)象的序列化與數(shù)據(jù)泛型綁定
這篇文章主要介紹了解析Java的Jackson庫(kù)中對(duì)象的序列化與數(shù)據(jù)泛型綁定,Jackson通常被用來(lái)實(shí)現(xiàn)Java對(duì)象和JSON數(shù)據(jù)的相互轉(zhuǎn)換功能,需要的朋友可以參考下2016-01-01

