如何將Object類型轉(zhuǎn)換為int類型
1
2
3
4
5
6
7
|
Object object = null ; try { Integer.parseInt(object.toString()); } catch (NumberFormatException e) {} |
也可以先判定一下是否是Integer
1
2
3
4
5
|
//可以先判定一下是否是Integer Object object = "111" ; if (object instanceof Integer) { Integer.parseInt(object.toString()); } |
String轉(zhuǎn)化Integer碰見的坑
項(xiàng)目開發(fā)中使用Interger將字符串轉(zhuǎn)為Integer類型,并進(jìn)行相應(yīng)的比較,開始數(shù)據(jù)較小,并未發(fā)現(xiàn)問題,如15
1
2
|
String a = "15" ; System.out.println(Integer.valueOf(a) == Integer.valueOf( "15" )); |
返回的結(jié)果為true,但是給我423
1
2
|
String a = "423" ; System.out.println(Integer.valueOf(a) == Integer.valueOf( "423" )); |
返回的結(jié)果為false,立馬查看Integer的源碼,發(fā)現(xiàn)了如下代碼
1
2
3
4
5
6
7
|
public static Integer valueOf( int i) { final int offset = 128 ; if (i >= - 128 && i <= 127 ) { // must cache return IntegerCache.cache[i + offset]; } return new Integer(i); } |
發(fā)現(xiàn)jdk未-128到127的數(shù)據(jù)做了一個(gè)緩存,如果數(shù)字在這個(gè)范圍內(nèi),是不會(huì)再從新new Integer的。問題,明白了,當(dāng)為423時(shí),會(huì)創(chuàng)建2個(gè)對(duì)象,而我們比較是使用 == 比較地址符的,所以肯定不相同。
我們可以查看下內(nèi)存地址。15的內(nèi)存地址
423的地址
423的內(nèi)存地址不一樣。所以我們需要使用equals來做比較,不應(yīng)該使用==來比較
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持服務(wù)器之家。
原文鏈接:https://www.cnblogs.com/yanl55555/p/12541563.html