包裝類型別,跳脫字元,BigDecimal,BigInteger,Ca

hahadelphi發表於2021-09-09

八種基本資料型別,每一個都對應了一個型別,我們把型別稱之為,基本資料型別的包裝類型別
byte -- Byte
short -- Short
char -- Character
int -- Integer
float -- Float
double -- Double
long -- Long
boolean -- Boolean

我們為什麼要將基本資料型別 轉換為 類型別?
可以使用類中的成員方法,來減少工作量,提供工作
int型別和String型別的相互轉換

A:int to String
1:String.valueOf(10);
2:new StringBuffer().append(10).toString();
3:int[] array1 = {10};Arrays.toString(array1);
4:"" + 10;
5:Integer.toString(10);

B:String to int
1:Integer.valueOf(String).intValue();
2:Integer.parseInt(String);
3:Integer.decode("10").intValue();
Integer 類中的常用方法:
public static String toBinaryString(int i):將10進位制的i轉換為二進位制的無符號表示形式
public static String toOctalString(int i):將10進位制的i轉換為八進位制的無符號表示形式
public static String toHexString(int i):將10進位制的i轉換為十六進位制的無符號表示形式

public static String toString(int i,int radix):
將十進位制轉換為其他進位制,這個進位制可以任意指定[2,36]範圍之間,超出了,就預設10

public static int parseInt(String s,int radix):其他進位制轉換為10進位制,其他進位制也是可以指定的
裝箱和拆箱

裝箱:基本資料型別 到 對應得包裝型別的 轉換過程 in box
拆箱:基本資料型別對應的包裝型別 到 基本資料型別的轉換過程 out of box

// 建立了一個Integer型別的物件或者引用x,並且呼叫有參的構造,進行初始化
Integer x = new Integer(4);
// 從jdk1.5 以後,開始,簡化上面的形式
Integer x1 = 4;// 發生了裝箱 int 型別 to Integer
// 裝箱:其實發生了 Integer.valueOf(4);

// 下面演示拆箱
int ii1 = x1;// 拆箱 Integer 型別 to int
// 拆箱:其實發生了 x1.intValue();

x = x + 5;// Integer + int
// 先拆箱,後裝箱

問題是 Integer的equals()方法有沒有被重寫
被重寫了,重寫的邏輯如下,拆箱後比較,比較int型別的值
public boolean equals(Object obj) {
if (obj instanceof Integer) {
return value == ((Integer)obj).intValue();
}
return false;
}
由裝箱的知識可知,裝箱就是執行了Integer.valueOf()

我們要檢視一下valueOf()的原始碼實現,看看到底發生了什麼事

程式碼一執行,就在Integer的內部產生了Integer型別的陣列,陣列的長度是256
並且,直接給陣列初始化了值,值的範圍為[-128-127]
對於valueOf()的呼叫者來說,如果引數在[-128,127]之間
那麼就直接從快取陣列中,取出對應的Integer型別的值,並返回
我們叫這種做法 常量池
否則 引數不在 [-128,127] 這個範圍內的 每次都new 一個
跳脫字元
符號 符號解釋 舉例
x 字元 x a :代表字母a
反斜線字元 :代表一個

字元類

[^abc] 取非 或者叫取反 任何字元,除了 a、b 或 c(否定)
[a-zA-Z] 52個大小寫字母的任意一個
[1,9]: 表示 一位的數字,有可能是1-9之間的任意一個數字

預定義字元類

. 任何字元 包括a,或者b等
d 數字:[0-9] d == [0-9]
D 非數字: [^0-9] D == [^0-9] 非數字就是字母
s 空白字元:[ tnx0Bfr]
S 非空白字元:[^s]
w 單詞字元:[a-zA-Z_0-9]
W 非單詞字元:[^w]

邊界匹配器
^ 行的開頭 "^d"
$ 行的結尾 "d$"

Greedy 數量詞
X? X,一次或一次也沒有 a?b: ab b 不匹配:aaab
X X,零次或多次 ab: aaaab
X+ X,一次或多次
X{n} X,恰好 n 次
X{n,} X,至少 n 次
X{n,m} X,至少 n 次,但是不超過 m 次 d{4,14}: 數字要有4位到14位之間
BigDecimal:
不可變的、任意精度的有符號十進位制數. 大值範圍的 小數

構造方法
BigDecimal(String val)
將 BigDecimal 的字串表示形式轉換為 BigDecimal。
BigInteger 類
不可變的任意精度的整數
可以讓超過Integer範圍內的資料進行運算

// BigInteger 沒有 + 的運算,要想讓兩個BigInteger 四則運算,只能呼叫方法
BigInteger bi1 = new BigInteger("10");
BigInteger bi2 = new BigInteger("20");

// bi1 + bi2;

bi1 = bi1.add(bi2);// 返回兩個陣列的和,但是不會改變原有的數值

System.out.println(bi1);

bi1 = bi1.subtract(bi2);// 返回兩個陣列的差,但是不會改變原有的數值

System.out.println(bi1);

bi1 = bi1.multiply(bi2);// 返回兩個陣列的乘積,但是不會改變原有的數值

System.out.println(bi1);

bi1 = bi1.divide(bi2);// 返回兩個陣列的商,但是不會改變原有的數值

System.out.println(bi1);

java中預設不能返回多個返回值,但是返回多個返回值又很常見,怎麼辦呢?
一般的處理方案
A:返回陣列,或者集合
B:返回一個型別(類可以有很多成員變數)
BigInteger[] array = bi2.divideAndRemainder(bi1);
System.out.println(Arrays.toString(array));
Calendar 日曆類
Calendar 是一個抽象類

public int get(int field):根據指定日曆的某個部分,返回值
public void add(int field,int amount)
public final void set(int year,int month,int date)

總結 Date 和Calendar都是表示 日期時間的,那麼要選用哪個合適呢?

建議:
一般用法,表示當前日期,就用Date即可,配合SimpleDateFormat 來格式化

  對日期進行加減運算,設定指定日期時,建議使用Calendar,(高階一點的應用就用Calendar)

Random類
此類的例項用於生成偽隨機數流.此類使用 48 位的種子
Random():建立一個新的隨機數生成器。 預設種子為當前的系統時間
Random(long seed):使用單個 long 種子建立一個新的隨機數生成器。
random.nextInt():// 隨機數範圍[-2^31,2^31-1]
random.nextInt(int n):n = bound 隨機數範圍[0,bound)

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/2471/viewspace-2808017/,如需轉載,請註明出處,否則將追究法律責任。

相關文章