型別比較 裝拆箱問題

2021-09-07 18:42:52 字數 2427 閱讀 7535

早上,在牛客看到這麼一道關於型別比較與自動裝拆箱的筆試題,於是做總結如下:

@test

public

void

test6()

false

false

false

true

前三個用==比較編譯不通過,兩邊型別需要一致。

integer.equals()方法檢視原始碼發現首先比較型別,然後比較值,因此equals()比較不同型別的肯定是false:

public

boolean

equals(object obj)

return

false

; }

1.對於引用型別的變數來說==比較的是位址,equals比較的是value

2.==是在同一型別的基本型別與包裝型別比較會自動裝拆包,equals不會對比較的資料型別進行轉換。

1.兩個均為包裝類

包裝型別一致

包裝型別內容相等(輸出true)

包裝型別內容不相等(輸出false)

包裝型別不一致

編譯失敗

2.乙個包裝型別乙個非包裝型別

包裝類和非包裝類型別一致

包裝類內容相等(會拆箱,輸出true)

包裝類內容不相等(會拆箱,輸出false)

包裝類和非包裝類型別不一致

如果兩類均為數字(如int、long、double、float、char=6) (輸出true)

如果一類為數字,一類為字元(char=6)  (輸出false)

如果一類為八大型別,另一類為string(編譯失敗)

3.兩個均為非包裝型別

按照上面拆箱的結果

例如:對於integer和int型別:

1、自動裝箱:integer iobj = 3;  裝箱就是  自動將基本資料型別轉換為包裝器型別;  通過valueof(int )實現,所有的valueof(***)的返回型別都是integer

裝箱**:

public

static integer valueof(int

i)

2、自動拆箱:intn = iobj ;//拆箱就是  自動將包裝器型別轉換為基本資料型別。

裝箱過程是通過呼叫包裝器的valueof方法實現的,而拆箱過程是通過呼叫包裝器的 ***value方法實現的。(***代表對應的基本資料型別)。

拆箱**:

/**

* returns the value of this as an

* .*/public

intintvalue()

注意:valueof("123")在內部呼叫parseint,parseint返回型別是int基本資料型別

public

static integer valueof(string s) throws

numberformatexception

public

static

int parseint(string s) throws

numberformatexception

總結:parseint(***) 和 valueof(***)的區別:

都是integer的靜態方法:(如果傳入的是字串處理的時候有可能出現numberformatexception異常,只是是執行時異常所以不需要try。。。catch。。。)

integer.parseint(str)是把乙個數字字串轉化成int型別的資料

integer.valueof(str or num) 是把乙個數字或者乙個字串轉化為integer型別的資料;

//

parseint 會丟擲異常numberformatexception

public

static

int parseint(string s) throws

numberformatexception //

public

static

int parseint(string s, int radix) throws

numberformatexception

//引數是數值型別的

public

static integer valueof(int

i) //

引數是字串型別的

public

static integer valueof(string s) throws

numberformatexception

Integer 裝箱拆箱 比較

integer i1 40 integer i2 40 integer i3 0 integer i4 new integer 40 integer i5 new integer 40 integer i6 new integer 0 integer i7 0 40 integer i8 i1 0 ...

包裝型別 裝箱拆箱 基本型別速度比較

首先是包裝型別 long sum long.valueof 0 long t1 system.currenttimemillis for long i long.valueof 0 i integer.max value 2 i t1 system.currenttimemillis t1 syst...

值型別 引用型別,裝箱 拆箱

值型別 宣告乙個值型別變數,會在棧上分配乙個空間,空間裡儲存的就是變數的值 引用型別 宣告乙個引用型別變數,會在棧中分配乙個空間,儲存乙個引用,這個引用指向了乙個託管堆。值型別 struct,列舉,數值型別,bool型別 引用型別 陣列,類,介面,委託 delegate object,string ...