欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java 包裝類從基本概念到實戰(zhàn)技巧

 更新時間:2025年06月30日 15:06:45   作者:IsLand1314  
Java包裝類將基礎類型對象化,支持泛型及集合使用,提供自動裝箱拆箱,實現(xiàn)類型轉換與字符串互轉,本文給大家介紹Java 包裝類從基本概念到實戰(zhàn)技巧,感興趣的朋友跟隨小編一起看看吧

1 什么是包裝類 ??

?? 在 JAVA 中,八大基礎數(shù)據(jù)類型(int,float,double...)不是繼承自 Object,并且不具備對象的特征的。比如:基本數(shù)據(jù)類型就不能調用方法。

int i = 10;
i.toString();

使用這段代碼就會出錯。

?? 但是我們在開發(fā)過程中肯定會遇到,將基本數(shù)據(jù)類型轉換為String類型,或者其他數(shù)據(jù)類型,而這個時候如果我們要用基礎數(shù)據(jù)類型實現(xiàn)這些轉換就會非常麻煩,所以Java就有了基本數(shù)據(jù)類型的包裝類,顧名思義,包裝類就是:將基本數(shù)據(jù)類型包裝成對象,使其具有了對象的屬性和方法。
這樣就可以使用方法和屬性了。

而包裝類的主要作用也就是:

  • 將本類型與其他類型進行轉換;
  • 將字符串與本類型及包裝類型相互轉換。

因此為了在泛型代碼中可以支持基本類型,并且讓基本數(shù)據(jù)類型也具備對象的特征,Java 給每個基本類型都對應 一個包裝類型

2. 怎么使用包裝類?

首先我們來看如何定義包裝類:比如定義一個int類型的包裝類

  • 定義整形包裝類
Integer i1 = new Integer(100);  //定義一個值為100的 整形包裝類
Integer i2 = 100

我們可能會有疑問,數(shù)據(jù)變成了包裝類,之后要使用數(shù)據(jù)怎么辦呢 --> 很簡單,我們在將包裝類轉換成基本數(shù)據(jù)類型就可以了

  • 包裝類轉換成基本數(shù)據(jù)類型
Integer i1 = new Integer(100);
int value = i1;//方法1
int value2 = i1.intValue();//方法2

經(jīng)過上述步驟就可以將包裝類轉換成基本數(shù)據(jù)類型了,這兩個例子分別展示了如何將int類型轉換成包裝類,如何將包裝類轉換成int類型。

3. 包裝類與基本類型的轉換 ??

  • 我們一般將“基本數(shù)據(jù)類型轉換成包裝類”的過程叫做裝箱,將“包裝類轉換成基本數(shù)據(jù)類型”的過程叫做拆箱

  • 當包裝類與基本數(shù)據(jù)類型比較,會自動將包裝類拆箱為基本數(shù)據(jù)類型
    java1.5之后又自動裝箱(autoboxing)和自動拆箱(autounboxing)功能

3.1 裝箱

  1. 把基本數(shù)據(jù)類型轉為包裝類對象。
  2. 可以分為手動裝箱和自動裝箱:
  3. 是為了使用專門為對象設計的API和特性

下面以 int 類型為例:

int i = 10; // 定義一個 int 基本類型值
Integer x = new Integer(i); //手動裝箱
Integer y = i; // 自動裝箱

3.2 拆箱

  1. 把包裝類對象拆為基本數(shù)據(jù)類型
  2. 可以分為手動拆箱和自動拆箱
  3. 一般是因為需要運算,Java中的大多數(shù)運算符是為基本數(shù)據(jù)類型設計的。比較、算術等

下面以 int 類型為例:

Integer j = new Integer(8); // 定義一個 Integer 包裝類對象,值為8
int m = j.intValue(); // 手動拆箱 int 類型
int n = j; // 自動拆箱為 int 類型

注: 由于我們經(jīng)常要做基本類型與包裝類之間的轉換,從JDK5.0 開始,基本類型與包裝類的裝箱、拆箱動作可以自動完成

  • 注意:只能與自己對應的類型之間才能實現(xiàn)自動裝箱與拆箱

4.基本數(shù)據(jù)類型、包裝類與字符串間的轉換 ??

(1)包裝類轉換成其他基本數(shù)據(jù)類型

Integer i = new Integer(100);
//轉換成double類型
double d = i.doubleValue();
//轉換成float類型
float f = i.floatValue();

(2)基本數(shù)據(jù)類型轉為字符串

  1. 使用包裝類的toString()方法;
  2. 使用String類的valueOf()方法;
  3. 使用一個空字符串加上基本類型。
int a = 10;
// 方法1
String s3 = Integer.toString(a);
// 方法2
String s1 = String.valueOf(a);
// 方法3
String s2 = a + "";

(3)字符串轉為基本數(shù)據(jù)類型

?? 方式1:除了Character類之外,其他所有包裝類都具有parseXxx靜態(tài)方法可以將字符串參數(shù)轉換為對應的基本類型,例如:

  • public static int parseInt(String s):將字符串參數(shù)轉換為對應的int基本類型。
  • public static long parseLong(String s):將字符串參數(shù)轉換為對應的long基本類型。
  • public static double parseDouble(String s):將字符串參數(shù)轉換為對應的double基本類型。
String a="123";
Integer.parseInt(a);
Short.parseShort(a);
Byte.parseByte(a);
Long.parseLong(a);
Float.parseFloat(a);
Double.parseDouble(a);
Boolean.parseBoolean(a);

?? 方式2:字符串轉為包裝類,然后可以自動拆箱為基本數(shù)據(jù)類型

  • public static Integer valueOf(String s):將字符串參數(shù)轉換為對應的Integer包裝類,然后可以自動拆箱為int基本類型
  • public static Long valueOf(String s):將字符串參數(shù)轉換為對應的Long包裝類,然后可以自動拆箱為long基本類型
  • public static Double valueOf(String s):將字符串參數(shù)轉換為對應的Double包裝類,然后可以自動拆箱為double基本類型

?? 注意:如果字符串參數(shù)的內容無法正確轉換為對應的基本類型,則會拋出java.lang.NumberFormatException異常。

5. 包裝類對象的特點 ??

包裝類緩存對象

Byte

 -128  - 127

Short

-128 - 127

Integer

-128 - 127

Long 

-128 - 127

Float

沒有

Double

沒有

Character

0 - 127

Boolean

true 和 false

(1)Integer128 問題

public static void main(String[] args) {
    Integer a = 127;
    Integer b = 127;
    Integer c = 128;
    Integer d = 128;
    int e = 128;
    System.out.println(a == b); // true
    System.out.println(c == d); // false
    System.out.println(d == e); // true
}
  • 其中在判斷(c == d)時輸出了false,很明顯輸出結果并不符合預期,在邏輯上也并不正確,而同樣的128==128的比較在基本數(shù)據(jù)類型int下便可以正常輸出true,首先要先弄清在128賦值時發(fā)生了什么,接下來通過javap -c反編譯查看測試代碼的字節(jié)碼。

?? 提醒一下:使用equals比較時,無論賦什么值都可以正確輸出true,下文所有討論都建立在使用==比較的前提上,同時出現(xiàn)問題的另一個本質也可以說是因為==比較的是地址。

在反編譯結果,可以知道Integer在初始化時調用了Integer.valueOf()方法,這也就是我們上面所講的Java的自動裝箱機制.。

在Integer對象創(chuàng)建過程中:

  • 如果傳入value數(shù)值在-128~127范圍內,那么所有在這個范圍內被創(chuàng)建的對象(句柄)實際都指向同一個地址,即被預創(chuàng)建Integer對象所在的地址。
  • 如果傳入value數(shù)值不在范圍內,那么每次被創(chuàng)建的對象(句柄)都指向一個新的且不同的地址,即通過new關鍵字由JVM分配的新地址。

(2)Integer 和 new Integer 問題

案例:

// 情況一:
public static void main(String[] args) {
    Integer m = new Integer(1);//新new的在堆中
    Integer n = 1;//這個用的是緩沖的常量對象,在方法區(qū)
    System.out.println(m == n);//false
    Integer x = new Integer(1);//新new的在堆中
    Integer y = new Integer(1);//另一個新new的在堆中
    System.out.println(x == y);//fa
}
// 情況二:
public static void main(String[] args) {
    int a = 10;
    String b = "10";
    Integer a1 = a;
    Integer b1 = Integer.parseInt(b);
    System.out.println(a1 == b1); // true
    Integer a2 = new Integer(a);
    Integer b2 = new Integer(b);
    System.out.println(a2 == b2); // false
}

Integer n = 1;

  • Integer變量指向的是 java 常量池中的對象

new Integer(1);

  • new Integer() 的變量指向堆中新建的對象,兩者在內存中的地址不同。

(3)類型轉換問題

public static void main(String[] args) {
    Integer i1 = 10;
    double i2 = 10;
    // 會將i 自動拆箱為 int,然后根據(jù)基本數(shù)據(jù)類型 ”自動類型轉換"規(guī)則,轉為 double 比較
    System.out.println(i1 == i2); // true 
    int i3 = 10;
    // 會自動拆箱,按照基本數(shù)據(jù)類型進行比較
    System.out.println(i1 == i3); // true
    Integer i4 = new Integer(10);  
    System.out.println(i3 == i4); // true
    System.out.println(i1 == i4); // false
    Double i5 = 10.0;
    System.out.println(i1 == i5); //編譯報錯
}

int 變量與 Integer、 int 變量與new Integer() 比較時,只要兩個的值是相等,則為true因為包裝類Integer 和 基本數(shù)據(jù)類型int 比較時,java會自動拆包裝為int ,然后進行比較,實際上就變?yōu)閮蓚€int變量的比較。

?? 腳下留心:使用包裝類時候的注意事項


使用包裝類時,需要注意以下幾點:

  1. 包裝類都重寫了Object 類中的toString()方法,以字符串的形式返回被包裝的基本數(shù)據(jù)類型的值。
  2. 除了Character外,包裝類都有valueOf(String s)方法,可以根據(jù)String類型的參數(shù)S創(chuàng)建包裝類對象,但參數(shù)s不能為null,而且該字符串必須是可以解析為相應基本類型的數(shù)據(jù),否則雖然可以編譯通過,但運行時會報錯。具體示例如下:
    Integer i = Integer.valueof("123");
    //合法
    Integer i = Integer,valueof("12a");
    //不合法,“12a“不能被正確解析為基本數(shù)據(jù)類型
  3. 除了Character 外,包裝類都有parseXxx(String s)靜態(tài)方法,該方法的作用是將字符串轉換為對應的基本類型的數(shù)據(jù)。參數(shù)不能為null,而且該字符串必須可以解析為相應基本類型的數(shù)據(jù),否則雖然可以編譯通過,但運行時會報錯。具體示例如下:
int i= Integer.parseInt("123");
//合法
Integer in= Integer.parseInt("itcast");
1/不合法 

6. 小結??

包裝類的特點:

  1. 對象化: 包裝類使基本數(shù)據(jù)類型可以作為對象處理,允許與 Java 的集合框架配合使用。
  2. 不可變性: 包裝類對象是不可變的,即一旦創(chuàng)建,其值不能更改。
  3. 類型轉換: 包裝類可以自動進行基本類型與對象之間的轉換(自動裝箱和拆箱)。
    • 自動裝箱:將基本數(shù)據(jù)類型自動轉換為對應的包裝類。
    • 拆箱:將包裝類對象自動轉換為對應的基本數(shù)據(jù)類型。

包裝類是 Java 中一個重要的特性,它使得基本數(shù)據(jù)類型能夠以對象的形式進行處理,增強了語言的靈活性與功能性。通過了解包裝類的特點和使用場景,可以在 Java 編程中更有效地處理數(shù)據(jù)。

到此這篇關于Java 包裝類詳解:從基本概念到實戰(zhàn)技巧的文章就介紹到這了,更多相關Java 包裝類內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • spring boot+spring cache實現(xiàn)兩級緩存(redis+caffeine)

    spring boot+spring cache實現(xiàn)兩級緩存(redis+caffeine)

    這篇文章主要介紹了spring boot+spring cache實現(xiàn)兩級緩存(redis+caffeine),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-02-02
  • 使用HttpClient實現(xiàn)文件的上傳下載方法

    使用HttpClient實現(xiàn)文件的上傳下載方法

    下面小編就為大家?guī)硪黄褂肏ttpClient實現(xiàn)文件的上傳下載方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-12-12
  • Java使用抽象工廠模式實現(xiàn)的肯德基消費案例詳解

    Java使用抽象工廠模式實現(xiàn)的肯德基消費案例詳解

    這篇文章主要介紹了Java使用抽象工廠模式實現(xiàn)的肯德基消費案例,較為詳細的分析了抽象工廠模式的定義、原理并結合實例形式分析了Java使用抽象工廠模式實現(xiàn)肯德基消費案例的步驟與相關操作技巧,需要的朋友可以參考下
    2018-05-05
  • SpringBoot注解@MapperScan的實現(xiàn)

    SpringBoot注解@MapperScan的實現(xiàn)

    @MapperScan是MyBatis和MyBatis-Plus提供的SpringBoot注解,用于自動掃描并注冊?Mapper?接口,使其能夠被?Spring?容器管理,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2025-05-05
  • Spring Boot配置application.yml及根據(jù)application.yml選擇啟動配置的操作方法

    Spring Boot配置application.yml及根據(jù)application.yml選擇啟動配置的操作

    Spring Boot中可以選擇applicant.properties 作為配置文件,也可以通過在application.yml中進行配置,讓Spring Boot根據(jù)你的選擇進行加載啟動配置文件,本文給大家介紹Spring Boot配置application.yml及根據(jù)application.yml選擇啟動配置的操作方法,感興趣的朋友一起看看吧
    2023-10-10
  • 解決Spring Boot中Druid連接池“discard long time none received connection“警告

    解決Spring Boot中Druid連接池“discard long time 

    本文主要介紹了解決Spring Boot中Druid連接池“discard long time none received connection“警告,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2025-03-03
  • 深入學習Java 動態(tài)代理

    深入學習Java 動態(tài)代理

    Java 動態(tài)代理機制的出現(xiàn),使得 Java 開發(fā)人員不用手工編寫代理類,只要簡單地指定一組接口及委托類對象,便能動態(tài)地獲得代理類。下面小編和大家來一起學習一下吧
    2019-05-05
  • springboot實現(xiàn)獲取客戶端IP地址的示例代碼

    springboot實現(xiàn)獲取客戶端IP地址的示例代碼

    本文介紹了在SpringBoot中獲取客戶端IP地址的幾種方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2024-11-11
  • 關于Spring?Boot項目的?log4j2?核彈漏洞問題(一行代碼配置搞定)

    關于Spring?Boot項目的?log4j2?核彈漏洞問題(一行代碼配置搞定)

    相信昨天,很多小伙伴都因為Log4j2的史詩級漏洞忙翻了吧,不過我看到群里發(fā)出來的各種修復方法,還真是不好看...所以這里也提一下Spring Boot用戶怎么修復最簡單吧,對Spring Boot log4j2 核彈漏洞問題感興趣的朋友參考下吧
    2021-12-12
  • Java?NIO?中Buffer?緩沖區(qū)解析

    Java?NIO?中Buffer?緩沖區(qū)解析

    這篇文章主要介紹了Java?NIO?中Buffer?緩沖區(qū),Java?NIO?中的?Buffer?用于和?NIO?通道進行交互。數(shù)據(jù)是通道讀取到緩沖區(qū),從緩沖區(qū)寫入到通道中的。下面內容希望幫助帶大家理解
    2022-02-02

最新評論