重新認識java中的“=”(更新)

在java中,=號表示賦值的意思。最近在學習AQS時,碰到了下面這個方法。在分析代碼的過程中,有幾個if語句以及對象間的互相賦值,看的有點凌亂。索性先來了解一下 = 號到底怎么用?

AQS--》addConditionWaiter

1、首先對于基本類型來說,比如int,當定義一個int a = 1時,這個時候1會放進常量池,當又有a=2時,常量池中會有一個2,。所以基本類型比較的時候都是比較值,那么基本類型的賦值就很好理解了,當有 int b = a,那么b的值也是a的值,這個時候b=3時,a和b就不再相等,常量池中有一個3。

2、基本類型的包裝類型,比如 Integer? h = 10000,那么內存中會開辟一塊空間存放10000,當這個時候修改h = 20000時,內存中會重新開辟出一塊空間存放20000。因為定義integer時,執(zhí)行的是Integer.valueOf(i),而Integer.valueOf()如果不在integerCache里的話,執(zhí)行的是new Integer(i)。當有 Integer j = h,此時j和h指向的是同一塊內存。當j或者h的值修改了,這倆個對象也不再相等,這也是為什么當倆個Integer對象的值在-128到127之間用==比較為true,而不在這個區(qū)間的值用==比較為false。因為不在區(qū)間內的倆個Integer是倆個不同的對象,修改了值就是修改對象整體。當修改了對象整體就相當于開辟了新的對象,內存中的地址就改變了。所以用==號不再相等了。


3、接下來分析自定義類中的=,假設有一個類如下,


首先創(chuàng)建一個實例:ComputerTest c1 = new ComputerTest("i7", "500", 10000);

再有一個實例 ComputerTest c2 = c1,此時c2和c1指向的是同一塊地址,當修改c1或者c2的某一個值時,倆個實例的值會同時修改,這時候c1和c2指向的仍然是同一塊內存。而當這個時候有一個ComputerTest c3 = new ComputerTest("i5", "1G", 20000)。如果有 c2 = c3,這個時候發(fā)生了什么?c2和c3指向了同一塊內存(這里相當于將c2的原來指向c1的指針指向了c3,雖然java中沒有指針的概念。java的reference應該類似于指針的概念)。當又有c3 = c1時,又將c1和c3指向了同一塊內存。又有c1 = c2,c2和c1指向了同一塊內存。這個時候 ,c3就變成了("i7", "500", 10000),這個時候c1 和 c2都指向了ComputerTest("i5", "1G", 20000),在現(xiàn)實中你可能不會這么用,這里只是為了舉例說明這個問題。這其實也驗證了java中的復制都是淺度復制,復制過后大家指的都是同一個東西。

這里補充:當ComputerTest c2 = c1時,c2和c1指向同一塊內存,置一塊內存是c1指向的內存。c2 = c3,c2指向了c3所指向的內存。所以在理解等號時,可以理解為將左邊的指向了右邊的所指向的內存。

圖片發(fā)自簡書App


再回頭去分析開頭的源碼就簡單很多啦!

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 1. Java基礎部分 基礎部分的順序:基本語法,類相關的語法,內部類的語法,繼承相關的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,706評論 18 399
  • *面試心聲:其實這些題本人都沒怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個offer,總結起來就是把...
    Dove_iOS閱讀 27,624評論 30 472
  • java筆記第一天 == 和 equals ==比較的比較的是兩個變量的值是否相等,對于引用型變量表示的是兩個變量...
    jmychou閱讀 1,648評論 0 3
  • 這篇文章是我之前翻閱了不少的書籍以及從網絡上收集的一些資料的整理,因此不免有一些不準確的地方,同時不同JDK版本的...
    高廣超閱讀 16,051評論 3 83
  • 從三月份找實習到現(xiàn)在,面了一些公司,掛了不少,但最終還是拿到小米、百度、阿里、京東、新浪、CVTE、樂視家的研發(fā)崗...
    時芥藍閱讀 42,803評論 11 349

友情鏈接更多精彩內容