早上,在牛客看到這麼一道關於型別比較與自動裝拆箱的筆試題,於是做總結如下:
@testpublic
void
test6()
false
false
false
true
前三個用==比較編譯不通過,兩邊型別需要一致。
integer.equals()方法檢視原始碼發現首先比較型別,然後比較值,因此equals()比較不同型別的肯定是false:
publicboolean
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
裝箱**:
publicstatic integer valueof(int
i)
2、自動拆箱:int
n = iobj ;
//拆箱就是 自動將包裝器型別轉換為基本資料型別。
裝箱過程是通過呼叫包裝器的valueof方法實現的,而拆箱過程是通過呼叫包裝器的 ***value方法實現的。(***代表對應的基本資料型別)。
拆箱**:
/*** returns the value of this as an
* .*/public
intintvalue()
注意:valueof("123")在內部呼叫parseint,parseint返回型別是int基本資料型別
publicstatic integer valueof(string s) throws
numberformatexception
publicstatic
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 ...