Java基礎回顧--基本數據類型包裝類 3

基本數據類型包裝類 2

【基本數據類型對象包裝類】
想要對基本類型數據進行更多的操作,最方便的方式就是將其封裝成對象。
爲啥呢?因爲在對象描述中就可以定義更多的屬性和行爲對該基本數據類型進行操作。

Java8種基本數據類型總結

序號

數據類型

 

封裝類

默認值

可表示數據範圍

1

byte()

1字節

Byte

0

-128~127

2

short(短整數)

2字節

Short

0

-32768~32767

3

int(整數)

4字節

Integer

0

-2147483648~2147483647

4

long(長整數)

8字節

Long

0

-9223372036854775808~9223372036854775807

5

float(單精度)

7

Float

0.0

1.4E-45~3.4028235E38

6

double(雙精度)

15

Double

0.0

4.9E-324~1.7976931348623157E308

7

char(字符)

2字節

Character

0~65535

8

boolean

 

Boolean

flase

truefalse


【基本數據類型變成對象包裝類的好處】
            可以將基本數據和字符串之間進行互相的轉換。
如:int類型的取值範圍是多少? 
       這就應該去查  Integer —— Integer.MAX_VALUE ; 

【基本數據類型包裝類的主要作用: 進行基本數據類型和字符串之間的轉換】                                                                             
  【基本類型數據 轉爲 字符串 的三種方式】
1.  基本數據類型對象包裝類中的方法 static String toString(基本類型);
2.  String類中的方法: static String valueOf(基本類型)
3.  基本類型數據 +“ ”;
【重點要掌握的就是:】
        字符串---->基本類型數據。
             返回值類型——>基本類型 ;參數——>字符串。
             基本數據類型  變量名 = 基本數據類型包裝類.parseXxx(XxxString);
                Long  l = Long.parseLong("4546545646546");
            System.out.println(Integer.parseInt("23") + 1);
            在八個基本類型對象包裝類中只有一個對象沒有parse方法,就是Character.

【類型轉換錯誤】——NumberFormatException——數字格式異常——我碰到了,因爲我多加了一個 空格。


【Integer中要掌握的方法】涉及到一個進制轉換的問題。
十進制-->其他進制。
二進制:static String toBinaryString(int);
16進制:static String toHexString(int);
八進制:static String toOctalString(int);
其他進制——>轉成十進制;
        Integer.toString(6 , 2); 將6轉換爲二進制。
        parseInt(intString , radix);
            System.out.println(Integer.parseInt("110") , 2);

————————————————————————————————

【基本數據類型值  和 基本類型數據對象之間的轉換】
            使用構造函數——Integer();
            即可以接受基本數值,也可以接收基本數值的字符串形式。
            可以使用基本類型對象中的方法。 static Integer valueOf(int);
【基本類型的對象  和  基本數據類型數值】
            int intValue();
如:
    Integer i = new Integer(34);
    int num = i.intValue( );
    System.out.println(num);
————————————————————————————————————————————

【如果兩數被封裝成了對象該如何比較呢?】
                【 基本數據類型的比較——用比較運算符; 引用數據類型使用compareTo進行比較。】
    int  compareTo( Integer anotherInteger ) 在數字上比較兩個Integer對象。
在數值上比較兩個Integer對象。以0 正數 負數 比較兩個數多的大小。

Integer a = new Integer(7);
Integer b = new Integer(5);
System.out.println(a.compareTo(b));

【重點】
對象想要進行比較,必須通過方法來完成,這個方法就是compareTo。
而很多對象都可以進行比較。所以這個方法定義在Comparable接口中。
想要對象具備比較功能,只要實現Comparable接口。

【練習題】。
————————————————————————————————————————————————
【基本數據類型對象包裝類JDk1.5以後的新特性】——【自動拆箱,裝箱】
簡化書寫。

Integer i = new Integer(5);
基本數據類型對象包裝類,對象創建的簡化寫法Integer i = 5;
1. Integer i = 5;(其實在內存中也是通過 new Integer(5)這種方式創建的!)
這種方式成爲——自動裝箱,Integer.valueOf(5)自動完成了對象創建的動作。
2. 在進行 i = i + 5,運算時——
= 右邊的i 會先轉成基本數據值(自動拆箱)i.intValue(),其實質爲:
i = i.intValue() + 5 ;然後再和5進行加法運算。

= 右邊運算完的結果,再次被自動裝箱變成Integer對象賦給i.

一旦簡化就有弊端:多具備一個值null. 使用自動裝箱拆箱時,要進行null的健壯性判斷。
【實例】
Integer x = null;
x = x.intValue() + 4;    x爲null 不能調用方法,此時會發生:NullPointerException異常。
————————————————————————————————
Boolean b = true; boolean b = true;的區別
答:前者:類類型變量指向一個對象,true爲一個對象;
        後者:true爲基本類型變量。
————————————————————————————————
在JdK1.5的新特性自動裝箱中,如果數值在byte類型範圍內(-128 ~ 127)。如果該對象數值重複出現
多個引用其實是指向同一個Integer對象,節省空間!但是超出了byte範圍,都會生產新的Integer對象。
Integer m = 127;
Integer n = 127;
System.out.println( m == n); //true
System.out.println(m.equals(n));  //true
____________________________________

Object x = 5;Object x 接受到了一個Integer對象,自動裝箱。
然而 Object不可以接受基本數據類型。
——————————————————————————————————————

【面試題】——"34 9 -7 67 25"要求對這個字符串中的數值進行從小到大的排序,生成一個數值有序的字符串。
【必須會】
思路:

1. 把其中的數拿出來,——對字符串進行切割。
2. 對數進行排序
3. 再追加成字符串。

步驟:1.split;——這個方法我還沒掌握,怎麼用。
【】——數組排序
      2.定義一個int數組  將 字符串數組——>int數組
      3.對int數組排序;
      4. 將int數組轉成字符串數組。
代碼體現:
  1. /** 
  2.  * 需求:"34 9 -7 67 25"要求對這個字符串中的數值進行從小到大的排序,生成一個數值有序的字符串。 
  3.  * @author Administrator 
  4.  * 
  5.  */  
  6. public class StringTestint {  
  7.     /** 
  8.      * @param args 
  9.      */  
  10.     public static void main(String[] args) {  
  11.         // TODO Auto-generated method stub  
  12.         //要操作的目標  
  13.         String s = "34 9 -7 67 25";  
  14.         //用空格對原字符串進行切割,轉成字符串數組;  
  15.         String[] s1 = s.split(" ");  
  16.         //定義int[]數組,用來存放整型數據  
  17.         int[] arr = new int[s1.length];  
  18.         //將字符串數組轉成int類型的數組。  
  19.         for(int i = 0 ; i < s1.length; i++)  
  20.             arr[i] = Integer.parseInt(s1[i]);  
  21.         //對int類型的數組進行排序  
  22.         for(int i = 0 ; i < s1.length;i++){  
  23.             for(int j = i+1 ; j < s1.length;j++){  
  24.                 if(arr[i] > arr[j]){  
  25.                     int temp = arr[i];  
  26.                     arr[i] = arr[j];  
  27.                     arr[j] = temp;  
  28.                 }  
  29.             }  
  30.         }  
  31.         //定義字符串緩衝區,並將int類型的數組轉換爲 字符串類型的數組。  
  32.         StringBuilder sb = new StringBuilder();  
  33.         for (int i = 0; i < arr.length; i++) {  
  34.             if(i != arr.length - 1)  
  35.                 sb.append(arr[i] + " ");  
  36.             else  
  37.                 sb.append(arr[i]);  
  38.         }  
  39.         System.out.println(sb);       
  40.     }  
  41. }  

代碼優化:
  1. import java.util.Arrays;  
  2.   
  3. public class WrapperTest2 {  
  4.   
  5.     private static final String SPACE = " ";  
  6.     /** 
  7.      * @param args 
  8.      */  
  9.     public static void main(String[] args) {  
  10.   
  11.         /* 
  12.          * 綜合練習: 
  13.          * "34 9 -7 12 67 25"要求對這個字符串中的數值進行從小到大的排序, 
  14.          * 然後生成一個數值有序的字符串。 
  15.          *  
  16.          * 思路: 
  17.          * 1,看到排序,就想要到了數組 
  18.          * 2,那數組中的元素怎麼獲取呢?數值都在字符串中。 
  19.          * 3,先從字符串中獲取到這些具體的數值。怎麼獲取呢? 
  20.          * 4,發現這個字符串居然有規律。數值之間都是由空格隔開的。 
  21.          *      可以對字符串進行切割。 
  22.          * 5,將獲取的數據存儲到數組中並排序,在將數組轉成字符就可以了。哦了。 
  23.          *  
  24.          *  
  25.          * 步驟: 
  26.          * 1,將字符串切割成字符串數組。split。 
  27.          * 2,定義一個int數組將字符串數組中的元素轉成整數存儲到int數組中。 
  28.          * 3,對int數組排序。 
  29.          * 4,將int數組排序後轉成一個字符串。  
  30.          *  
  31.          */  
  32.           
  33.         String str = "34 9 -7 12 67 25";  
  34.           
  35.         str = sortStringNumber(str);  
  36.         System.out.println(str);  
  37.     }  
  38.   
  39.     public static String sortStringNumber(String str) {  
  40.           
  41.         //1,將字符串中的數值通過指定的規則進行切割獲取字符串數組。  
  42.         String[] str_nums = toStringArray(str);  
  43.           
  44.         //2,將字符串數組轉成int數組。   
  45.         int[] nums = toIntArray(str_nums);  
  46.           
  47.         //3,對int數組排序;  
  48.         sortIntArray(nums);  
  49.           
  50.         //4,將int數組變成字符串。   
  51.         return arrayToString(nums);  
  52.     }  
  53.     /* 
  54.      * 將int數組變成字符串。  
  55.      */  
  56.     private static String arrayToString(int[] nums) {  
  57.         //1,創建字符串緩衝區。  
  58.         StringBuilder sb = new StringBuilder();  
  59.         for (int i = 0; i < nums.length; i++) {  
  60.             if(i!=nums.length-1)  
  61.                 sb.append(nums[i]+SPACE);  
  62.             else  
  63.                 sb.append(nums[i]);  
  64.         }  
  65.           
  66.         return sb.toString();  
  67.     }  
  68.   
  69.     /* 
  70.      * 對int數組排序。  
  71.      */  
  72.     private static void sortIntArray(int[] nums) {  
  73.         Arrays.sort(nums);  
  74.     }  
  75.   
  76.     /* 
  77.      * 將字符串數組轉成int數組。  
  78.      */  
  79.     private static int[] toIntArray(String[] str_nums) {  
  80.         //1,先定義一個int數組。   
  81.         int[] arr = new int[str_nums.length];  
  82.           
  83.         //2,對字符串數組進行遍歷。  
  84.         for (int i = 0; i < str_nums.length; i++) {  
  85.             //將數組格式的字符串轉成整數。存儲到arr數組中。   
  86.             arr[i] = Integer.parseInt(str_nums[i]);  
  87.         }  
  88.           
  89.           
  90.         return arr;  
  91.     }  
  92.     /* 
  93.      * 將字符串轉成字符串數組。  
  94.      */  
  95.     private static String[] toStringArray(String str) {  
  96.           
  97.         return str.split(SPACE);  
  98.     }  
  99.       
  100.       
  101.   


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章