国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

首頁 Java Java入門 深入理解java中的自動裝箱與拆箱

深入理解java中的自動裝箱與拆箱

Dec 19, 2019 am 11:55 AM
java 拆箱 理解 自動裝箱

深入理解java中的自動裝箱與拆箱

一、什麼是裝箱,什麼是拆箱

裝箱:把基本資料型別轉換成包裝類別。

拆箱:把包裝類別轉換為基本資料型別。

基本資料型別所對應的包裝類別:

int(幾個位元組4)- Integer

byte(1)- Byte

short (2)- Short

long(8)- Long

float(4)- Float

double(8)- Double

char(2 )- Character

boolean(未定義)- Boolean

免費線上影片學習教學推薦:java影片教學

二、先來看看手動裝箱和手動拆箱

例子:拿int和Integer舉例

Integer i1=Integer.valueOf(3);
int i2=i1.intValue();

手動裝箱是透過valueOf完成的,大家都知道= 右邊值賦給左邊,3是一個int類型的,賦給左邊就變成了Integer包裝類別。

手動拆箱是透過intValue()完成的,透過程式碼可以看到i1 從Integer變成了int

三、手動看完了,來看自動的

為了減輕技術人員的工作,java從jdk1.5之後變成自動裝箱與拆箱,還拿上面那個舉例:

手動:

Integer i1=Integer.valueOf(3);
int i2=i1.intValue();

自動

Integer i1=3;
int i2=i1;

這是已經(jīng)預設自動裝好和拆好了。

四、從幾題目中加深對自動裝箱和拆箱的理解

(1)

Integer a = 100;
int b = 100;
System.out.println(a==b);結果為 true

原因:a 會自動拆箱和b 進行比較,所以為true

(2)

Integer a = 100;
Integer b = 100;
System.out.println(a==b);//結果為true
Integer a = 200;
Integer b = 200;
System.out.println(a==b);//結果為false

這就發(fā)生一個有意思的事了,為什麼兩個變數(shù)一樣的,只有值不一樣的一個是true ,一個是false。

原因:這種情況就要說一下== 這個比較符號了,== 比較的記憶體位址,也就是new 出來的物件的記憶體位址,看到這你們可能會問這好像沒有new啊,但其實Integer a=200; 200前面是預設有new Integer的,所用記憶體位址不一樣== 比較的就是false了,但100為什麼是true呢?這是因為 java中的常數(shù)池 我們可以點開 Integer的源碼看看。

private static class IntegerCache {
    static final int low = -128;
    static final int high;
    static final Integer cache[];

    static {
        // high value may be configured by property
        int h = 127;
        String integerCacheHighPropValue =
            sun.misc.VM.getSavedProperty("java.lang.Integer.IntegerCache.high");
        if (integerCacheHighPropValue != null) {
            try {
                int i = parseInt(integerCacheHighPropValue);
                i = Math.max(i, 127);
                // Maximum array size is Integer.MAX_VALUE
                h = Math.min(i, Integer.MAX_VALUE - (-low) -1);
            } catch( NumberFormatException nfe) {
                // If the property cannot be parsed into an int, ignore it.
            }
        }
        high = h;

        cache = new Integer[(high - low) + 1];
        int j = low;
        for(int k = 0; k < cache.length; k++)
            cache[k] = new Integer(j++);

        // range [-128, 127] must be interned (JLS7 5.1.7)
        assert IntegerCache.high >= 127;
    }

在對-128到127 之間的進行比較時,不會new 對象,而是直接到常數(shù)池中獲取,所以100是true,200超過了這個範圍然後進行了new 的操作,所以記憶體位址是不同的。

(3)

Integer a = new Integer(100);
Integer b = 100;
System.out.println(a==b);
//結果為false

這跟上面那個100的差不多啊,從常數(shù)池中拿,為什麼是false呢?

原因:new Integer(100)的原因,100雖然可以在常數(shù)池中拿,但架不住你直接給new 了一個物件啊,所用這兩個記憶體位址是不同的。

(4)

Integer a = 100;
Integer b= 100;
System.out.println(a == b);
//結果true
a = 200;
b = 200;
System.out.println(c == d);
//結果為false

原因:= 號右邊值賦給左邊a,b已經(jīng)是包裝類了,200不在常數(shù)池中,把int 類型200 賦給包裝類,自動裝箱又因為不在常數(shù)池中所以預設new了對象,所以結果為false。

更多相關文章教學可以存?。?a href="http://m.miracleart.cn/java/guide/" target="_blank">java語言入門

#

以上是深入理解java中的自動裝箱與拆箱的詳細內(nèi)容。更多資訊請關注PHP中文網(wǎng)其他相關文章!

本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發(fā)現(xiàn)涉嫌抄襲或侵權的內(nèi)容,請聯(lián)絡admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Laravel 教程
1601
29
PHP教程
1502
276
如何使用JDBC處理Java的交易? 如何使用JDBC處理Java的交易? Aug 02, 2025 pm 12:29 PM

要正確處理JDBC事務,必須先關閉自動提交模式,再執(zhí)行多個操作,最後根據(jù)結果提交或回滾;1.調(diào)用conn.setAutoCommit(false)以開始事務;2.執(zhí)行多個SQL操作,如INSERT和UPDATE;3.若所有操作成功則調(diào)用conn.commit(),若發(fā)生異常則調(diào)用conn.rollback()確保數(shù)據(jù)一致性;同時應使用try-with-resources管理資源,妥善處理異常並關閉連接,避免連接洩漏;此外建議使用連接池、設置保存點實現(xiàn)部分回滾,並保持事務盡可能短以提升性能。

了解Java虛擬機(JVM)內(nèi)部 了解Java虛擬機(JVM)內(nèi)部 Aug 01, 2025 am 06:31 AM

TheJVMenablesJava’s"writeonce,runanywhere"capabilitybyexecutingbytecodethroughfourmaincomponents:1.TheClassLoaderSubsystemloads,links,andinitializes.classfilesusingbootstrap,extension,andapplicationclassloaders,ensuringsecureandlazyclassloa

如何使用Java的日曆? 如何使用Java的日曆? Aug 02, 2025 am 02:38 AM

使用java.time包中的類替代舊的Date和Calendar類;2.通過LocalDate、LocalDateTime和LocalTime獲取當前日期時間;3.使用of()方法創(chuàng)建特定日期時間;4.利用plus/minus方法不可變地增減時間;5.使用ZonedDateTime和ZoneId處理時區(qū);6.通過DateTimeFormatter格式化和解析日期字符串;7.必要時通過Instant與舊日期類型兼容;現(xiàn)代Java中日期處理應優(yōu)先使用java.timeAPI,它提供了清晰、不可變且線

比較Java框架:Spring Boot vs Quarkus vs Micronaut 比較Java框架:Spring Boot vs Quarkus vs Micronaut Aug 04, 2025 pm 12:48 PM

前形式攝取,quarkusandmicronautleaddueTocile timeProcessingandGraalvSupport,withquarkusoftenpernperforminglightbetterine nosserless notelless centarios.2。

了解網(wǎng)絡端口和防火牆 了解網(wǎng)絡端口和防火牆 Aug 01, 2025 am 06:40 AM

NetworkPortSandFireWallsworkTogetHertoEnableCommunication whereSeringSecurity.1.NetWorkPortSareVirtualendPointSnumbered0-655 35,with-Well-with-Newonportslike80(HTTP),443(https),22(SSH)和25(smtp)sindiessingspefificservices.2.portsoperateervertcp(可靠,c

垃圾收集如何在Java工作? 垃圾收集如何在Java工作? Aug 02, 2025 pm 01:55 PM

Java的垃圾回收(GC)是自動管理內(nèi)存的機制,通過回收不可達對象釋放堆內(nèi)存,減少內(nèi)存洩漏風險。 1.GC從根對象(如棧變量、活動線程、靜態(tài)字段等)出發(fā)判斷對象可達性,無法到達的對像被標記為垃圾。 2.基於標記-清除算法,標記所有可達對象,清除未標記對象。 3.採用分代收集策略:新生代(Eden、S0、S1)頻繁執(zhí)行MinorGC;老年代執(zhí)行較少但耗時較長的MajorGC;Metaspace存儲類元數(shù)據(jù)。 4.JVM提供多種GC器:SerialGC適用於小型應用;ParallelGC提升吞吐量;CMS降

比較Java構建工具:Maven vs. Gradle 比較Java構建工具:Maven vs. Gradle Aug 03, 2025 pm 01:36 PM

Gradleisthebetterchoiceformostnewprojectsduetoitssuperiorflexibility,performance,andmoderntoolingsupport.1.Gradle’sGroovy/KotlinDSLismoreconciseandexpressivethanMaven’sverboseXML.2.GradleoutperformsMaveninbuildspeedwithincrementalcompilation,buildcac

以身作則,解釋說明 以身作則,解釋說明 Aug 02, 2025 am 06:26 AM

defer用於在函數(shù)返回前執(zhí)行指定操作,如清理資源;參數(shù)在defer時立即求值,函數(shù)按後進先出(LIFO)順序執(zhí)行;1.多個defer按聲明逆序執(zhí)行;2.常用於文件關閉等安全清理;3.可修改命名返回值;4.即使發(fā)生panic也會執(zhí)行,適合用於recover;5.避免在循環(huán)中濫用defer,防止資源洩漏;正確使用可提升代碼安全性和可讀性。

See all articles