1. 程式人生 > >java 基礎 之 包裝類

java 基礎 之 包裝類

包裝類的簡單介紹:

  • java 8種基本資料型別 對應 8中基本包裝類
  • 除了Char 對應Character, int對應Integer之外.其他6種基本資料型別對應的都是首字母大寫

java不同版本對包裝類的加強

  • JDK 1.5 之前
    • 把基本資料型別轉換成包裝型別都是使用構造方法
    • 8個包裝類中除了character之外.還可以通過傳入一個字串引數來構建包裝類
    • 包裝類轉成基本資料型別可以使用包裝類的 XXXValue()靜態方法[已經過時]
  • JDK 1.5 之後提供了自動裝箱與拆箱的功能
    • 自動裝箱
      • 可以把一個基本資料型別的值.直接賦值給包裝類
    • 自動拆箱
      • 把一個包裝類的值.直接賦值給一個基本資料型別
  • 除了自動裝箱與自動拆箱以外.包裝類還可以與String 進行相互轉換
    • String 轉基本資料型別
      • 包裝類提供的靜態方法 parseXXX(String s),
      • 除了Character 之外所有的方法都提供了該方法;
      • 包裝類提供的XXX(String s) 構造器
      • 利用String過載的多個valueOf()方法;
  • JDK 1.7 版本之後又給所有的包裝類添加了一個 compare(xxx,xxx)方法.用於比較兩個引數的大小
    • 大於 返回 1
    • 等於返回 0
    • 小於返回 -1
    • 值得一提的是Date日期了也有這個方法
  • JDK .17 除了compare之外,還給character 增加了大量的工具方法來進行判斷
  • JDK 1.8 版本再次加強了這些包裝類的功能.為整型包裝類支援無符號算數運算.
    詳見jdk API

例項程式碼

package com.example.javademo.Wrapper;

import org.junit.Test;

/**
 * 本篇主要演示包裝類與基本資料型別的自動裝箱與自動拆箱
 *
 * @author 扎羅
 * @version 1.0
 * @since 2018年12月21日
 */
public class AutoBoxAndAutoUnBox {


    /**
     * 演示自動裝箱與拆箱
     */
    @Test
    @SuppressWarnings("all")
    public void autoBoxAndAutoUnBoxTest() {

        int b = 12;
        // 自動裝箱
        Integer i = b;
        //自動拆箱
        int a = i;
        // JDK 1.5 以前 基本資料型別轉成包裝類的方式;都是依賴夠著方法
        Integer c = new Integer(12);
        Integer d = new Integer("12");
        // JDK 1.5 以前 包裝類轉成基本資料型別
        int cc = c.intValue();
        int i1 = d.intValue();

    }

    @Test
    public void stringTest() {

        //String 轉 基本資料型別
        char    c1  = 'c';
        int     i2  = 123;
        long    l1  = 12341239L;
        byte    b1  = 1;
        double  d1  = 12.1d;
        float   f1  = 1212.11f;
        boolean bo1 = false;
        //String 提供的過載的valueOf() 方法
        String s1 = String.valueOf(i2);
        String s2 = String.valueOf(l1);
        String s3 = String.valueOf(b1);
        String s4 = String.valueOf(d1);
        String s5 = String.valueOf(f1);
        String s6 = String.valueOf(bo1);
        String s7 = String.valueOf(c1);
        System.out.println("=======int 轉 String : " + s1);
        System.out.println("=======long 轉 String : " + s2);
        System.out.println("=======double 轉 String : " + s4);
        System.out.println("=======boolean 轉 String : " + s6);
        // 包裝類提供的parseXXX()與構造器();
        int i3 = Integer.parseInt(s1);
        System.out.println("======Integer parseInt()" + i3);
        double v = Double.parseDouble(s4);
        System.out.println("======Integer parseInt()" + v);

        //基本型別裝字串.最簡單的方法 + "";
        String ss = d1+"";
    }

    /**
     * Integer 的特殊性
     *      Integer快取設計 -128~127 剛好是short的範圍
     */
    @Test
    public  void  integerTest(){

        int i1 =  12;
        Integer i2 =  129;
        System.out.println("=====快取以外的integer例項比較" + (i1==i2));
        /*
        這兩個明明看起來數字相等.但是輸出的結果卻為false;
        原因就在於Integer 快取的設計.
        在 -128 ~ 127 的數字都是取自快取.但是不在這個範圍內的==就屬於比較地址值了.
        所以不相等
         */
        Integer  i3 = 129;
        System.out.println("快取以外的Integer例項進行比較"+(i2==i3));
    }

    /**
     * JDK 7 新增的compare 方法
     *      返回結果 1 代表 大於
     *              0 代表 等於
     *              -1代表 小於
     */
    @Test
    public void compareTest(){

        /*
         *比較特殊的boolean的比較
         */
        System.out.println(Boolean.compare(true,false));    //1
        System.out.println(Boolean.compare(false,false));   //0
        System.out.println(Boolean.compare(false,true));    //-1
        System.out.println(Boolean.compare(true,true));     //0
        System.out.println("===========================");

        Integer i = 10;
        Integer s = 1222;
        System.out.println(Integer.compare(i,s));   //-1

    }
}