1. 程式人生 > >Integer,int 數字進行比較

Integer,int 數字進行比較

背景:兩個Integer的數字進行比較,有時返回為true,而有時返回為false。比如以下情況:

1.String s = new String("127");
flag= Integer.valueOf(s.trim()) == Integer.parseInt("127");
System.out.println("==============="+flag);                   //
true


2.int a =600;
intb =Integer.valueOf("600");
flag= a==b;
System.out.println(
"==============="+flag);                  //true

3.Integer a2= Integer.valueOf("800");
Integerb2 = Integer.valueOf((new String("800  ")).trim());
flag= a2 == b2;
System.out.println(

"==============="+flag);                 //false

4.Integer  c = 127;  
       Integer  d = 127;  
       System.err.println(c== d);       //true


       5.c = 128;  
       d = 128; 
       System.err.println(c== d);     //false

要說明這個問題,首先應該搞明白Integerint的關係,int是基本資料型別,是原生的,Integer是引用型別,相當於整型物件,所以在相互賦值和比較的時候就會有變化。

1.Integer  a  =  127

底層自動呼叫valueOfint  i)方法,將127進行裝箱,並將引用賦給a


 

值得注意的是,當數值超過127時,JVM會開闢新記憶體儲存。經valueOf方法儲存數值大小範圍在-128 ~127,超過此範圍的數值都會開闢新記憶體。

2.Integer a = Integer.valueOf((new String("128 ")).trim());

java.lang.Integer類中,過載valueOf方法,最終呼叫valueOfint i)方法,所以儲存規則與裝箱相同。



3.int  a =Integer.valueOf((new String("128"));

Integer轉換為int,底層呼叫intValue()方法,將引用所指記憶體中的數值賦值給變數。

   

4.Integer數值之間的比較

直接將兩個引用的值進行比較即可,所以若兩個值超過127,則兩個引用肯定不同。

5.int數值之間的比較

將兩個數值直接進行比較,int型別的數值大小範圍為-2147483648~2147483647

6.Integerint型別之間的比較

Integer拆箱成int型別,將記憶體中的數值進行比較