1. 程式人生 > >jdk1.8下的自動裝箱cache

jdk1.8下的自動裝箱cache

【現象】

在jdk 1.8.0_111下程式碼:

public static void main(String[] args) {
Integer a = 2;
Integer b = 2;
System.out.println(a==b);

Integer c = 222;
Integer d = 222;
        System.out.println(c==d);

}

結果輸出為:

true

false

【思考與探究】

    為何兩個2封裝後的物件指向同一個物件,而222就不是?

    檢視java.lang.Integer原始碼Integer.class第780行:

    

    高亮這一行初始化了一個長度為256的Integer型別的陣列cache,並把-128到127共256個數剛好塞進這個cache裡。因此後面遇到要自動裝箱-128到127的整數時,會直接指向cache裡的同一個陣列元素不用新建物件;反之則需要新建物件,因此物件引用不同。

    沒事多讀讀java原始碼對於問題理解有極大幫助。

相關推薦

jdk1.8自動裝箱cache

【現象】在jdk 1.8.0_111下程式碼:public static void main(String[] args) {Integer a = 2;Integer b = 2;System.out.println(a==b);Integer c = 222;Intege

理解JDK1.5的自動裝箱拆箱

特性 ava 創建 幫我 max 循環 assert rally jdk1 JDK1.5的升級引入了裝箱和拆箱概念,簡單說就是為了簡化書寫。   JDK1.5之前,創建Integer對象是需要這麽寫的 Integer i = new Integer("3");   JDK

dubbo-admin在jdk1.8報錯問題(已解決)

在虛擬機器上部署dubbo-admin的時候報錯: ERROR context.ContextLoader - Context initialization failed org.springframework.beans.factory.BeanCreationExce

jdk1.8dubbo-admin啟動失敗

1、webx的依賴改為3.1.6版; <dependency> <groupId>com.alibaba.citrus</groupId> <artifactId>citrus-web

Jdk1.8的HashMap原始碼分析

**目錄結構** 一、面試常見問題 二、基本常量屬性 三、構造方法 四、節點結構        4.1 Node類        4.2.TreeNode 五、put方法

Centos7安裝 JDK1.8

class bce hostname etc 下載 nod tar.gz 執行 profile   最近看了一篇技術文章, 用 nginx+tomcat+redis+centos 實現 session 共享等功能,覺得很有用,就跟著文章在 Centos7 的環境下搭建了幾個

項目版本不同導致Eclipse報錯問題——關於在JDK1.7環境中,運行JDK1.8環境編寫的項目

water 錯誤 顯示 lips 1.8 ips avi 序號 fill 本人電腦環境配置的是JDK1.7,朋友的是JDK1.8 ,我把她編的java文件導入到我電腦裏的Eclipse(LUNA版本)的時候,項目出現一個紅色嘆號,當然運行是肯定出錯了。SO我就開始了解決之旅

CentOS安裝JDK1.8

dcb arp too sharp ima 環境變量 wget oracl tools.jar 下載官方的軟件包,參考地址:http://download.oracle.com/otn-pub/java/jdk/8u151-b12/e758a0de34e24606bca

JDK1.8在LINUX安裝步驟

末尾 style nbsp oot port tar ali -c 環境變量 JDK1.8在LINUX下安裝步驟: 在/usr/lib/目錄下新建jvm文件夾,如果已有jvm文件夾,則將之前的JDK版本刪除,即在jvm目錄下執行命令:rm –rf * 將JDK文件jdk-

Linux(centOS7.0)虛擬機環境安裝JDK1.8

rep csdn 完成 安裝jdk 1.7 頂部 安裝包 centos7 tps 閱讀目錄 1.檢查系統是否安裝了JDK 2.準備工作 3.配置環境變量 4.驗證是否安裝成功 回到頂部 1.檢查系統是否安裝了JDK   1.打開SecureCRT終端,輸入:jav

Ubuntu16.04安裝jdk1.8過程

ubunt 地址 ins 退出 .com 安裝jdk AD size class 筆者環境:騰訊雲服務器 Ubuntu16.04 x64 一 . 去oracle官網下載對應的jdk 下載地址:http://www.oracle.com/technetwork/java/

jmeter4+win10+jdk1.8環境,jmeter輸入中文就卡死的問題

alt 問題解決 顯示 不兼容 info jmeter 輸入法 題解 猜想 問題描述:jmeter4+win10+jdk1.8環境下,輸入中文jmeter卡死; 解決思路: 起初以為是win10系統不兼容的問題,裝了個虛擬機,在虛擬機裏面裝了win7,然後再裝了jme

服務器Centos7.4 jdk1.8環境配置、mysql環境搭建,mysql找回(重置)密碼看這篇就夠了

版本 jdk下載 改密 我們 完成 eight ati html wid 最近一直幫我的同學搭建自己的服務器,其中涉及到了以下知識點,經過查詢博客資料等方式,再加上多重實踐,我成功總結出了完整的配置一個簡單服務器環境的步驟: (來自 ZYXS 的CSDN 博客 ,全文地址請

linux源碼安裝jdk1.8和tomcat8.5

ubuntu srv hotspot 源碼安裝 tar build ali bit 低版本 Java是目前可移植性較高的語言,相當火熱,tomcat運行就需要Java語言環境 0.java簡介 1)tomcat運行需要對應的Java環境,Java環境通過安裝jdk來獲得

MacJava開發環境設定:JDK1.8+Maven3.5.4+IDEA設定

這篇文章整理一下Mac下Java開發常用連結和設定。 java開發 JDK下載 下載內容 下載地址 JDK https://www.oracle.com/technetwork/j

Linux安裝JDK1.8步驟

1.檢查一下系統中是否已安裝jdk [[email protected] local]# java -version 如果顯示如下,則需要解除安裝。 openjdk version "1.8.0_102" OpenJDK Runtime Environment (build 1

JDK1.8 bin目錄的exe檔案使用方法簡介(一)

appletviewer.exe(小程式瀏覽器,可用來執行HTML檔案上的小程式): windows環境下新建一個java檔案,定義為一個彈窗事件小程式(彈窗顯示一段文字): import java.awt.*; import java.applet.*; public clas

centosJdk1.8的安裝及配置

安裝之前,首先要確定centos是否集成了自帶的openjdk,如果有,我們先要刪除自帶的openjdk,具體步驟如下: 1)在系統終端輸入:rpm -qa|grep java,如果有openjdk的話,會出現類似於XXXX_openjdk_XXX的資訊; 2)

JDK1.8 bin目錄的exe檔案使用方法簡介(四)

jabswitch.exe 使用方法:Java Access Bridge Switch的簡稱,用於控制Java訪問橋的開/關。Java訪問橋是一種技術,讓Java應用程式實現Accessibility API,以供Microsoft Windows系統的輔助技術訪問。 測試方法:

JDK1.8 bin目錄的exe檔案使用方法簡介(三)

idlj.exe的使用方法: 這些工具用於建立使用 OMG-Standard IDL 和 CORBA/IIOP 的應用程式 比較晦澀的詞語請見此篇短文:https://blog.csdn.net/hipilee/article/details/42197765 生產對映到OMG IDL介