詳細(xì)講解Java中==與equals的區(qū)別對(duì)比
java == 與 equals 的對(duì)比
== 是一比較運(yùn)算符
- 既可以判斷基本類型,又可以判斷引用類型。
- 如果判斷基本類型,判斷的是值是否相等。
int x = 80; double y = 80.0; System.out.println(x==y); //true
- 如果判斷引用類型,判斷的是地址是否相等,既判斷是不是同一個(gè)對(duì)象。
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) { //如果是同一個(gè)對(duì)象 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 判斷是不是同一個(gè)對(duì)象 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; } }
- 默認(rèn)判斷的是地址是否相等,既判斷是不是同一個(gè)對(duì)象。子類中往往重寫該方法,用于判斷內(nèi)容是否相等。比如( String, Integer)
//把object的equals方法重寫了,變成了比較兩個(gè)字符串值 是否相同 String類的 equals方法 源碼 if (anObject instanceof String) { //判斷類型 String anotherString = (String)anObject; //向下轉(zhuǎn)型 int n = value.length; if (n == anotherString.value.length) { //如果長(zhǎng)度相同 char v1[] = value; char v2[] = anotherString.value; int i = 0; while (n-- != 0) { //然后一個(gè)一個(gè)的比較字符 if (v1[i] != v2[i]) return false; i++; } return true; //如果兩個(gè)字符串的所有字符都相等,則返回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("好好學(xué)習(xí)"); String str2 = new String("好好學(xué)習(xí)"); System.out.println(str1.equals(str2)); //true Integer 也重寫了object的 equals 方法,變成了判斷兩個(gè)值是否相同 源碼 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 判斷兩個(gè)值是否相等
以上就是詳細(xì)講解Java中==與equals的區(qū)別對(duì)比的詳細(xì)內(nèi)容,更多關(guān)于Java ==與equals區(qū)別的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
java實(shí)現(xiàn)銀行ATM管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)銀行ATM管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-05-05SpringMVC的注解@RequestMapping屬性及使用
這篇文章主要為大家介紹了SpringMVC注解@RequestMapping屬性及使用,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05spring boot項(xiàng)目沒有mainClass如何實(shí)現(xiàn)打包運(yùn)行
這篇文章主要介紹了spring boot項(xiàng)目沒有mainClass如何實(shí)現(xiàn)打包運(yùn)行,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-01-01Java中Velocity快速對(duì)變量中的引號(hào)特殊字符進(jìn)行轉(zhuǎn)義
Velocity是一個(gè)基于Java的模板引擎,與Freemarker類似,這篇文章主要介紹了Java中Velocity如何對(duì)變量中的引號(hào)特殊字符進(jìn)行轉(zhuǎn)義,主要記錄一下在使用中碰到的要對(duì)引號(hào)特殊字符進(jìn)行轉(zhuǎn)義的問題,需要的朋友可以參考下2023-07-07Spring MVC如何設(shè)置請(qǐng)求頭和響應(yīng)頭的Header
這篇文章主要介紹了Spring MVC如何設(shè)置請(qǐng)求頭和響應(yīng)頭的Header問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2025-03-03mysql+spring+mybatis實(shí)現(xiàn)數(shù)據(jù)庫讀寫分離的代碼配置
今天小編就為大家分享一篇關(guān)于mysql+spring+mybatis實(shí)現(xiàn)數(shù)據(jù)庫讀寫分離的代碼配置,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2019-03-03Spring Boot創(chuàng)建可執(zhí)行jar包的實(shí)例教程
這篇文章主要介紹了Spring Boot創(chuàng)建可執(zhí)行jar包的實(shí)例教程,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-02-02