Java中Object.equals和String.equals的區(qū)別詳解
前言
Java中的堆和常量池的區(qū)別是什么呢?Object.equals與String.equals的區(qū)別呢?下面讓我們通過一個(gè)小示例讓你明白它~
1、基礎(chǔ)知識(shí)
Java的存儲(chǔ)空間:寄存器、棧、堆、靜態(tài)存儲(chǔ)區(qū)、常量存儲(chǔ)區(qū)(常量池)、其他存儲(chǔ)位置。
此處重點(diǎn)介紹堆和常量存儲(chǔ)區(qū):
堆:存儲(chǔ)new的對(duì)象;
常量池:用來存儲(chǔ)final static、String的常量。
2、Object.equals與String.equals的區(qū)別
Object.equals(==):比較內(nèi)存地址;
String.equals: 比較內(nèi)容即可,不管內(nèi)存地址。
總結(jié):
Object.equals相等,String.equals一定相等;
String.equals相等,Object.equals不一定相等。
3、實(shí)戰(zhàn)演練
public class TestString { public static void main(String[] args){ // 維護(hù)在常量池里面 String a="hello"; String b="hello"; // new出來的所有對(duì)象都在堆內(nèi)存中 // 只要是new出現(xiàn)來的都是新對(duì)象 String c=new String("hello"); String d=new String("hello"); // 對(duì)比內(nèi)存地址 //true System.out.println(a==b); //false System.out.println(a==c); //false System.out.println(c==d); //對(duì)比內(nèi)容 //true System.out.println(a.equals(b)); //true System.out.println(a.equals(c)); //true System.out.println(c.equals(d)); } }
解釋:
a,b都是常量,a和b都是指向常量存儲(chǔ)區(qū)中的常量’hello’,所以無論內(nèi)容還是內(nèi)存地址都是一樣的,因此a==b以及a.equals(b)都是true;
c,d都是變量,他們都是new出來的對(duì)象,里面存在兩個(gè)hello變量,c和d分別指向自己的hello變量,所以c和d內(nèi)容一樣,但是內(nèi)存地址不一樣,因此c==d是true,但是c.equals(d)為true。
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
相關(guān)文章
Java 獲取當(dāng)前時(shí)間及實(shí)現(xiàn)時(shí)間倒計(jì)時(shí)功能【推薦】
這篇文章主要介紹了Java 獲取當(dāng)前時(shí)間及實(shí)現(xiàn)時(shí)間倒計(jì)時(shí)功能 ,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-05-05詳解SpringBoot2.0的@Cacheable(Redis)緩存失效時(shí)間解決方案
這篇文章主要介紹了詳解SpringBoot2.0的@Cacheable(Redis)緩存失效時(shí)間解決方案,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04Java-Redis-Redisson分布式鎖的功能使用及實(shí)現(xiàn)
這篇文章主要介紹了Java-Redis-Redisson-分布式鎖的功能使用及實(shí)現(xiàn),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-08-08Java實(shí)現(xiàn)解析zip壓縮包并獲取文件內(nèi)容
這篇文章主要為大家詳細(xì)介紹了如何利用Java語(yǔ)言實(shí)現(xiàn)頁(yè)面上傳一個(gè)源碼壓縮包,后端將壓縮包解壓,并獲取每個(gè)文件中的內(nèi)容,感興趣的可以動(dòng)手嘗試一下2022-07-07Java使用動(dòng)態(tài)規(guī)劃算法思想解決背包問題
背包問題(Knapsack problem)是一種組合優(yōu)化的NP完全問題。問題可以描述為:給定一組物品,每種物品都有自己的重量和價(jià)格,在限定的總重量?jī)?nèi),我們?nèi)绾芜x擇,才能使得物品的總價(jià)格最高2022-04-04Java8實(shí)現(xiàn)優(yōu)雅的獲取重復(fù)字符與次數(shù)
這篇文章主要為大家詳細(xì)介紹了在Java8中,我們應(yīng)該如何進(jìn)行字符及字符串的去重,以及計(jì)算去重次數(shù),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解下2023-12-12如何利用反射生成?MyBatisPlus中QueryWrapper動(dòng)態(tài)條件
這篇文章主要介紹了如何利用反射生成?MyBatisPlus中QueryWrapper動(dòng)態(tài)條件,分享在MyBatisPlus中經(jīng)常會(huì)用到代碼來構(gòu)造查詢條件等內(nèi)容,需要的小伙伴可以參考一下2022-02-02