日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

面试官:谈谈equals() 和 == 的区别

發(fā)布時(shí)間:2025/3/21 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 面试官:谈谈equals() 和 == 的区别 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

引言

談?wù)?/font>equals() 和 == 的區(qū)別,這是一個(gè)非常經(jīng)典的問(wèn)題,不是特別難,面試也時(shí)有問(wèn)道;但是很多小伙伴在面試時(shí)腦子卻一片空白,痛失offer;所以在這里我詳細(xì)介紹一下這兩者的區(qū)別,希望對(duì)你能有幫助;

包裝類

包裝類無(wú)非就是Byte, Short, Integer, Long, Float, Double, Character, Boolean這幾種,所以這里我就用Integer做例子;
對(duì)于包裝類記住一點(diǎn):包裝類的equals()方法已經(jīng)被Sun公司重寫了,所以包裝類的eqauls()方法比較的是內(nèi)容,而==比較的還是兩個(gè)對(duì)象的的地址;
測(cè)試代碼:

package code01;public class IntegerTest01 {public static void main(String[] args) {Integer num1 = 1000;Integer num2 = 1000;System.out.println("使用'=='比較num1和num2:");System.out.println(num1==num2); // falseSystem.out.println("使用'equals'比較num1和num2:");System.out.println(num1.equals(num2)); // true} }

輸出結(jié)果:

使用'=='比較num1和num2: false 使用'equals'比較num1和num2: true

因?yàn)閚um1 和 num2存放了不同的對(duì)象的地址,所以使用==比較就是false,而num1 和 num2的對(duì)象存放的數(shù)據(jù)都是1000,通過(guò)equals方法比較就會(huì)返回true;

Integer特例

當(dāng)然有時(shí)候使用Integer時(shí)會(huì)發(fā)現(xiàn)一個(gè)神奇的事情,我先展示一個(gè)代碼:

package code01;public class IntegerTest02 {public static void main(String[] args) {Integer num1 = 100;Integer num2 = 100;System.out.println("使用'=='比較num1和num2:");System.out.println(num1==num2); // trueSystem.out.println("使用'equals'比較num1和num2:");System.out.println(num1.equals(num2)); // true} } 使用'=='比較num1和num2: true 使用'equals'比較num1和num2: true

可以發(fā)現(xiàn)==竟然是true,num1和num2不是存放的兩個(gè)對(duì)象的地址嗎?這其實(shí)是Java對(duì)Integer的特定設(shè)計(jì),它將-128~127之間的整數(shù)自動(dòng)裝箱成了Integer實(shí)例,所以在這個(gè)范圍的整數(shù)調(diào)用的時(shí)候就直接調(diào)用的封裝好的這些數(shù)字,就不需要再重建Integer實(shí)例了;
其實(shí)這種對(duì)數(shù)據(jù)的緩存有很多好處,很多地方會(huì)使用這種方法提高系統(tǒng)的性能,感興趣可以了解一下;

String類

String類和包裝類就很像了,Sun公司同樣重寫了String的equals方法,同樣比較的是對(duì)象內(nèi)容;
但是String類需要注意String對(duì)象創(chuàng)建之后就會(huì)存放到常量池中,當(dāng)再次調(diào)用時(shí)會(huì)直接引用常量池中的String對(duì)象;但是如果是自己又創(chuàng)建新的String對(duì)象時(shí)則對(duì)象將不會(huì)在常量池中存儲(chǔ);
測(cè)試代碼:

package code01;public class StringTest {public static void main(String[] args) {String str1 = "今天是個(gè)好天氣";String str2 = "今天是個(gè)好天氣";String str3 = new String("今天是個(gè)好天氣");String str4 = new String("今天是個(gè)好天氣");System.out.println("==========str1和str2===========");System.out.println("使用'=='比較str1和str2:");System.out.println(str1==str2); // trueSystem.out.println("使用'equals'比較str1和str2:");System.out.println(str1.equals(str2)); // trueSystem.out.println("==========str1和str3===========");System.out.println("使用'=='比較str1和str3:");System.out.println(str1==str3); // falseSystem.out.println("使用'equals'比較str1和str3:");System.out.println(str1.equals(str3)); // trueSystem.out.println("==========str3和str4===========");System.out.println("使用'=='比較str3和str4:");System.out.println(str4==str3); // falseSystem.out.println("使用'equals'比較str3和str4:");System.out.println(str4.equals(str3)); // true} }

輸出結(jié)果:

使用'=='比較str1和str2: true 使用'equals'比較str1和str2: true ==========str1和str3=========== 使用'=='比較str1和str3: false 使用'equals'比較str1和str3: true ==========str3和str4=========== 使用'=='比較str3和str4: false 使用'equals'比較str3和str4: true

我來(lái)解釋一下代碼:
首先str1創(chuàng)建的String對(duì)象存放到常量池中,然后str2再次使用相同的字符串時(shí)就會(huì)直接引用到常量池中的對(duì)應(yīng)字符串的地址,所以str1和str2引用地址相同,對(duì)象內(nèi)容也相同;

str3則是新創(chuàng)建的一個(gè)對(duì)象,那么str3創(chuàng)建的字符串將不會(huì)存放到常量池中,這就意味著str1和str3引用的對(duì)象不同,那么地址也就不相同了,但是對(duì)象的內(nèi)容都是一樣的;

對(duì)于str3和str4都是一樣的道理:對(duì)象地址不同,對(duì)象內(nèi)容相同;

可以自己動(dòng)手試一下,就明白了;

自定義類型

對(duì)于自定義類型或者或者包裝類、String類以外的數(shù)據(jù)類型,equals比較的就是對(duì)象地址,而不是內(nèi)容,這里我就自定義一個(gè)數(shù)據(jù)類型舉例;
示例代碼:

package code01;public class MyTest01 {public static void main(String[] args) {Person01 person1 = new Person01("張三", 18);Person01 person2 = new Person01("張三", 18);System.out.println("使用'=='比較person1和person2:");System.out.println(person1==person2); // falseSystem.out.println("使用'equals'比較person1和person2:");System.out.println(person1.equals(person2)); // false} } // 自定義類型 class Person01 {String name;int age;// 無(wú)參構(gòu)造器public Person01() {}// 有參構(gòu)造器public Person01(String name, int age) {this.name = name;this.age = age;} }

輸出結(jié)果:

使用'=='比較person1和person2: false 使用'equals'比較person1和person2: false

可以看到都是false,因?yàn)檫@里equals和==都是比較的對(duì)象地址,所以如果我們想要比較對(duì)象的內(nèi)容就需要按自定義的比較規(guī)則重寫equals方法;
重寫版本:

package code01;import java.util.Objects;public class MyTest02 {public static void main(String[] args) {Person02 person1 = new Person02("張三", 18);Person02 person2 = new Person02("張三", 18);System.out.println("使用'=='比較person1和person2:");System.out.println(person1==person2); // falseSystem.out.println("使用'equals'比較person1和person2:");System.out.println(person1.equals(person2)); // true} } // 自定義類型 class Person02 {String name;int age;// 無(wú)參構(gòu)造器public Person02() {}// 有參構(gòu)造器public Person02(String name, int age) {this.name = name;this.age = age;}// 重寫equals方法public boolean equals(Object o) {if (this == o) return true;if (!(o instanceof Person02)) return false;Person02 person02 = (Person02) o;// 當(dāng)age和name都相同時(shí)才相同return age == person02.age && Objects.equals(name, person02.name);} }

輸出結(jié)果:

使用'=='比較person1和person2: false 使用'equals'比較person1和person2: true

可以看到重寫后的equals就可以按照自定義的規(guī)則進(jìn)行比較了;

總結(jié)

其實(shí)說(shuō)了這么多,總結(jié)一下:
String類和包裝類的equals()方法已經(jīng)重寫,可以直接比較對(duì)象內(nèi)容;

其余的數(shù)據(jù)類型的equals()方法比較對(duì)象地址,如果想要比較內(nèi)容需要重寫方法;

==都是比較對(duì)象地址;

點(diǎn)評(píng)

《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

總結(jié)

以上是生活随笔為你收集整理的面试官:谈谈equals() 和 == 的区别的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 他揉捏她两乳不停呻吟动态图 | 日韩精品一区二区三区不卡在线 | 日韩欧美成人一区二区三区 | 少妇裸体性生交 | 91爱爱网站 | 黄色录像片子 | 国产成人一区 | 国产免费一区二区视频 | 亚洲高清av在线 | 手机免费在线观看av | 中文字幕有码在线播放 | 偷偷操网站 | 一区二区三区黄色录像 | 久久久精品人妻av一区二区三区 | 欧美高清视频一区二区 | 国产又粗又猛又黄视频 | 五月天丁香网 | 国产免费高清视频 | 精品久久无码中文字幕 | 四色成人av永久网址 | 色婷婷综合久久久久中文字幕 | 亚洲一区不卡在线 | 成人午夜视频精品一区 | 日本视频在线免费观看 | 日韩一级大片 | 亚洲国产日韩一区 | 欧美亚洲少妇 | 后进极品美女白嫩翘臀 | 国产性一乱一性一伧一色 | 强公把我次次高潮hd | 日本一区视频在线播放 | 催眠调教后宫乱淫校园 | 亚洲精品视频在线免费 | 天天色影网 | 在线伊人网 | 国产精品久久久久久免费 | 九一国产视频 | 日韩av大片 | 天堂网成人 | 午夜av不卡 | 激情久久五月天 | 色网站在线播放 | 亚洲理论电影在线观看 | 爱吃波客今天最新视频 | 亚洲一区二区免费在线观看 | 男人日女人的网站 | 亚洲天天看 | 亚洲石原莉奈一区二区在线观看 | 韩国女主播av | 综合婷婷 | 国产吧在线 | 在线观看免费av网址 | 久草热线 | 国产精品电影一区二区三区 | 国产成人久久精品流白浆 | 国产原创麻豆 | 狠狠做深爱婷婷久久综合一区 | 91影院在线 | 成人动漫一区二区 | 国产视频自拍一区 | 好大好舒服视频 | 杨幂国产精品一区二区 | 日本精品久久久久久久 | 欧美精品一区二区三区在线 | 91操碰| 国产精品一区二区三区久久久 | yjizz视频网 国产乱人对白 | 色视频在线免费观看 | 一区二区三区日 | xnxx国产| 91欧美日韩 | 人妻巨大乳hd免费看 | 在哪里可以看毛片 | 久久精品高清视频 | 黑人精品无码一区二区三区 | 少妇一级淫免费播放 | 亚洲第一激情 | 在线播放少妇奶水过盛 | 国产a级大片 | 69xx国产| 橹图极品美女无圣光 | 午夜色婷婷 | 国产制服91一区二区三区制服 | 色婷婷色综合 | 四虎免看黄 | 肥婆大荫蒂欧美另类 | 琪琪伦伦影院理论片 | 国产偷v国产偷v亚洲高清 | 99久99| 久久9久久| 日韩一区二区高清视频 | 亚洲精品20p | 亚洲天堂aaa | 精品一区二区三区成人免费视频 | 国产毛片精品国产一区二区三区 | 美日韩av | 久久123 | 免费萌白酱国产一区二区三区 | 欧美在线一区二区三区四区 |