最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

1 什么是包裝類 ??

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

int i = 10;
i.toString();

使用這段代碼就會(huì)出錯(cuò)。

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

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

  • 將本類型與其他類型進(jìn)行轉(zhuǎn)換;
  • 將字符串與本類型及包裝類型相互轉(zhuǎn)換。

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

2. 怎么使用包裝類?

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

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

我們可能會(huì)有疑問,數(shù)據(jù)變成了包裝類,之后要使用數(shù)據(jù)怎么辦呢 --> 很簡單,我們?cè)趯b類轉(zhuǎn)換成基本數(shù)據(jù)類型就可以了

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

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

3. 包裝類與基本類型的轉(zhuǎn)換 ??

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

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

3.1 裝箱

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

下面以 int 類型為例:

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

3.2 拆箱

  1. 把包裝類對(duì)象拆為基本數(shù)據(jù)類型
  2. 可以分為手動(dòng)拆箱和自動(dòng)拆箱
  3. 一般是因?yàn)樾枰\(yùn)算,Java中的大多數(shù)運(yùn)算符是為基本數(shù)據(jù)類型設(shè)計(jì)的。比較、算術(shù)等

下面以 int 類型為例:

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

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

  • 注意:只能與自己對(duì)應(yīng)的類型之間才能實(shí)現(xiàn)自動(dòng)裝箱與拆箱

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

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

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

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

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

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

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

  • public static int parseInt(String s):將字符串參數(shù)轉(zhuǎn)換為對(duì)應(yīng)的int基本類型。
  • public static long parseLong(String s):將字符串參數(shù)轉(zhuǎn)換為對(duì)應(yīng)的long基本類型。
  • public static double parseDouble(String s):將字符串參數(shù)轉(zhuǎn)換為對(duì)應(yīng)的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:字符串轉(zhuǎn)為包裝類,然后可以自動(dòng)拆箱為基本數(shù)據(jù)類型

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

?? 注意:如果字符串參數(shù)的內(nèi)容無法正確轉(zhuǎn)換為對(duì)應(yīng)的基本類型,則會(huì)拋出java.lang.NumberFormatException異常。

5. 包裝類對(duì)象的特點(diǎn) ??

包裝類緩存對(duì)象

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)時(shí)輸出了false,很明顯輸出結(jié)果并不符合預(yù)期,在邏輯上也并不正確,而同樣的128==128的比較在基本數(shù)據(jù)類型int下便可以正常輸出true,首先要先弄清在128賦值時(shí)發(fā)生了什么,接下來通過javap -c反編譯查看測(cè)試代碼的字節(jié)碼。

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

在反編譯結(jié)果,可以知道Integer在初始化時(shí)調(diào)用了Integer.valueOf()方法,這也就是我們上面所講的Java的自動(dòng)裝箱機(jī)制.。

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

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

(2)Integer 和 new Integer 問題

案例:

// 情況一:
public static void main(String[] args) {
    Integer m = new Integer(1);//新new的在堆中
    Integer n = 1;//這個(gè)用的是緩沖的常量對(duì)象,在方法區(qū)
    System.out.println(m == n);//false
    Integer x = new Integer(1);//新new的在堆中
    Integer y = new Integer(1);//另一個(gè)新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 常量池中的對(duì)象

new Integer(1);

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

(3)類型轉(zhuǎn)換問題

public static void main(String[] args) {
    Integer i1 = 10;
    double i2 = 10;
    // 會(huì)將i 自動(dòng)拆箱為 int,然后根據(jù)基本數(shù)據(jù)類型 ”自動(dòng)類型轉(zhuǎn)換"規(guī)則,轉(zhuǎn)為 double 比較
    System.out.println(i1 == i2); // true 
    int i3 = 10;
    // 會(huì)自動(dòng)拆箱,按照基本數(shù)據(jù)類型進(jìn)行比較
    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); //編譯報(bào)錯(cuò)
}

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

?? 腳下留心:使用包裝類時(shí)候的注意事項(xiàng)


使用包裝類時(shí),需要注意以下幾點(diǎn):

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

6. 小結(jié)??

包裝類的特點(diǎn):

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

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

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

相關(guān)文章

最新評(píng)論

平潭县| 越西县| 中牟县| 大冶市| 滁州市| 香格里拉县| 桦南县| 新和县| 彭州市| 林甸县| 奇台县| 广州市| 凉山| 南江县| 中阳县| 甘谷县| 新龙县| 如东县| 南木林县| 渝北区| 红桥区| 庆元县| 临沧市| 哈巴河县| 甘肃省| 东光县| 扎鲁特旗| 湘潭县| 靖西县| 天柱县| 射洪县| 中西区| 成安县| 贡山| 丹阳市| 江陵县| 遂平县| 罗山县| 康马县| 汕头市| 漳州市|