1. 程式人生 > >關於int Integer比較的問題

關於int Integer比較的問題

1. 今天有朋友問了我一個關於int  Integer比較的面試題

Integer a=new Integer(3);
Integer b=3;                   //   java在編譯的時候,被翻譯成-> Integer b = Integer.valueOf(3);  
int c=3;
System.out.println(a==b);
System.out.println(a==c);

執行結果 false  ture,

第一個因為a是new出來的物件,與b的地址引用不同,所以為false;

第二個因為比較的時候發生自動拆箱,將a自動變為int,不管值為多少始終是相等的。

總結一下,只要是2個new出來的Integer比較,肯定是fales,因為他們的引用地址不同,

                 只要是integer與int比較,都是ture。因為會把intger自動變為int。

2. 還有一種情況:       

	Integer a = 127;
        Integer b = 127;
	Integer c = 128;
	Integer d = 128;
	System.out.println(a == b);
	System.out.println(c == d);

執行結果ture,  false  。

Intger a =127相當於 Integer a =Integer.valueOf(127);檢視 valueOf() 原始碼:

public static Integer valueOf(int i) {  
	     assert IntegerCache.high >= 127;  
	   if (i >= IntegerCache.low && i <= IntegerCache.high)  
	           return IntegerCache.cache[i + (-IntegerCache.low)];  
	   return new Integer(i);  
 }  
對於-128到127之間的數,會進行快取,Integer a= 127時,會將127進行快取,下次再寫Integer b= 127時,就會直接從快取中取,就不會new了。所以執行的結果為true,false.

相關推薦

關於int Integer比較的問題

1. 今天有朋友問了我一個關於int  Integer比較的面試題Integer a=new Integer(3); Integer b=3; // java在編譯的時候,被翻譯成-> Integer b = Integer.va

Integerint比較大小

1.Int和Integer比較大小 public static void main(String[] args) {         int i = 10;         Integer i1 = ne

Integerint使用==比較的總結

/** * Returns an {@code Integer} instance representing the specified * {@code int} value. If a new {@code Integer} instance is not * required, thi

Integerint比較

最近發現了一個情況;如下: public static void main(String[] args) { Integer a=333; Integer b=333; int c=333; System.out.println(a==b);

關於intInteger比較的問題

在看到好幾道有關這個int和Integer的值比較的問題,於是搗騰了一番,也釋了疑惑。 1. Integer a = new Integer(12); Integer b = new Integer(12); System.out.println(a == b)

Integerint比較,大資料量情況下造成頻繁gc的原因分析

很多基礎的知識,覺得沒用,所以沒有在意。當實際用到的時候,出現了不同於預想的結果,才會認真分析。 這是shell排序的程式碼 public long sort(Integer[] datas) { long start = System.currentT

java中String,int,Integer,char 型別轉換

如何將整數 int 轉換成Integer ? Integer integer=new Integer(i); 如何將Integer 轉換成 int ? int num=Integer.intValue(); 如何將字串 String 轉換成整數 int? int i =

JAVA中Long與Integer比較容易犯的錯誤

今天使用findbugs掃描專案後發現很多高危漏洞,其中非常常見的一個是比較兩個Long或Integer時直接使用的==來比較。 其實這樣是錯誤的。 因為Long與Ineger都是包裝型別,是物件。  而不是普通型別long與int , 所以它們在比較時必須都應該用equ

Long的equals和相同數值的Integer比較為何為false?

看程式碼: @Test public void demo2(){ Integer integer100 = 100; int int100 = 100; Long long200 = 200l

關於Integer比較問題

1 public class Test { 2 public static void main(String[] args) { 3 Integer a=127; 4 Integer b=127; 5 System.out.println

Integer比較時最好不要用==

上述程式碼的答案,涉及到Java緩衝區和堆的問題。 java中Integer型別對於-128-127之間的數是緩衝區取的,所以用等號比較是一致的。但對於不在這區間的數字是在堆中new出來的。所以地址空間不一樣,也就不相等。 Integer b3=60,這是一個裝箱過程也就是Integer b3=In

Integer比較的各種問題

1、包裝類Integer跟基本型別int的比較上面兩種型別比較的時候是直接取出包裝類事例所包裝的數值進行比較。Integer it1 = 2; Integer it3 = new Integer(2); int i1 = 2; System.out.println(it1 =

string int Integer之間的轉換以及日期問題[轉]

如何將字串 String 轉換成整數 int?   int i = Integer.valueOf(my_str).intValue(); int i=Integer.parseInt(str); 如何將字串 String 轉換成Integer ? Integer integ

Java Integer比較中的那些坑

前幾天同事偶然遇到的一個問題,在list中查詢出重複的值,留下第一個,其餘刪除。 ArrayList<Integer> a//a中裝有要操作的資料,都是數字 for(int i;i<a.size();i++){ //....遍歷

關於Integer比較相等的問題

作為一個菜雞,記下來免得忘了。1.通過new出來的兩個Integer物件比較時,==是比較的物件地址,等同於一般物件比較的==,equals則會比較其內部的int值是否相等。因為內部重寫了equals方法:public boolean equals(Object obj) {

JAVA中Long與Integer 比較的誤區

今天使用findbugs掃描專案後發現很多高危漏洞,其中非常常見的一個是比較兩個Long或Integer時直接使用的==來比較。 其實這樣是錯誤的。 因為Long與Ineger都是包裝型別,是物件。  而不是普通型別long與int , 所以它們在比較時必須都應該用eq

Integer比較大小問題

看深入理解java虛擬機器時候發現下面的程式碼比較: public class TestClass { public static void main(String[] args) { Integer a = 1;

Integer比較是否相等問題

有兩大種情況 1. Integer 與 Integer 進行比較 2. Integer 與 int 進行比較 第一種:Integer 與 int進行比較 Integer 與int進行比較,會自動比較  兩個的值是否相等,如同 int與int這種基本型別的比較一樣。 第二種:

Integer比較值大小==,大於等於128的返回false

code: Integer a1 = 127; Integer b1 = 127; if(a1==b1){ System.out.println("相等"); }else{ System.out.println("不等"); } Inte

Java中Integerint比較大小出現的錯誤

最好 裏的 pan 轉換 als 範圍 urn 返回 錯誤 Java在某一處維護著一個常量池,(我記得)在小於128的範圍內,直接用 1 Integer i = 100; 2 int j = 100; 3 return i == j;//true 這裏返回的是true.