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

關於int和Integer比較的問題

在看到好幾道有關這個int和Integer的值比較的問題,於是搗騰了一番,也釋了疑惑。

1.

	Integer a = new Integer(12); 
	Integer b = new Integer(12); 
	System.out.println(a == b);
輸出結果:false

分析:是兩個integer引用的比較,==比較的是引用(記憶體地址)

2.

		Integer a = 12; 
		Integer b = 12; 
		System.out.println(a == b);
輸出結果:true
		Integer a = 212; 
		Integer b = 212; 
		System.out.println(a == b);

輸出結果:false

分析:

The Java Language Specification, 3rd Edition 寫道:

  1. 為了節省記憶體,對於下列包裝物件的兩個例項,當它們的基本值相同時,他們總是==:  
  2.  Boolean  
  3.  Byte  
  4.  Character, \u0000 - \u007f(7f是十進位制的127)  
  5.  Integer, -128 — 127  
系統把-128~127之間的整數自動裝箱成Integer例項,並放入一個名為cache的陣列快取起來,如果把一個-128~127之間的整數自動裝箱成一個Integer例項,實際上就是直接指向陣列元素,所以相等;但每次把一個不在-128~127的範圍內整數自動裝箱成Integer例項時,系統需重新建立一個Integer例項。

3、

		Integer a = 212; 
		int b = 212; 
		System.out.println(a == b);
輸出結果:true

分析:在編譯的時候,編譯器是將其轉換成相同的型別進行比較的,即將物件型別轉換成基本型別,System.out.println(i1 == i2)就等同於System.out.println(i1.intValue() == i2),前面說了,“==”作用於基本型別的時候比較的就是基本型別的值,兩個值都是2,所以結果是true。

關於這個問題憑自己的能力也弄不清楚原因,在下面這篇文章裡終於弄明白了。

http://www.ticmy.com/?p=110

相關推薦

關於intInteger比較的問題

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

Java中intinteger比較

Java中,數值型的建立和字串有類似的地方,Integer是Java為了使用物件的屬性和方法給int準備的型別。字串 String s = “bag”; 這樣建立會在常量池中查詢 bag,沒有的話就新建,並不會在堆裡新建。 同樣地,Integer i = 11;也不會在堆裡

intInteger的簡單比較

int與Integer的區別  1、屬於四類八種基本型別中的一種,用int 宣告的變數是非物件型別,即不能在其上呼叫方法。Integer是一個類(包裝類),用Integer宣告變數其實一個物件型別(或者是一個引用型別) 2、“==”作用於基本型別時比較的是基本型別的值,作用於物件上

intInteger有什麽區別?

機制 microsoft val family jdk1 經歷 ont .com () 可參考:http://www.cnblogs.com/liuling/archive/2013/05/05/intAndInteger.html 從Java 5開始引入了自動裝箱/拆

封裝類非封裝類比較相同不intInteger

com margin idt val image 相同 -1 img wid A.所有和int(非封裝類比較的,只要數值相同就行) B.io3由valueof弄出來的,所以和io1相同 C.io4是new出來的,所以地址不一樣,就不相同 D.和A相同封裝類和非封裝類比較相

【轉】Java裏面的intInteger的區別

之間 assert 默認 out val 就會 java常量池 使用 spa int和Integer的區別 1、Integer是int的包裝類,int則是java的一種基本數據類型 2、Integer變量必須實例化後才能使用,而int變量不需要 3、Integer實際是對象

intInteger的區別

() con ger 包裝 -c out vhd 包裝類 fort 1、Integer是int的包裝類,int則是java的一種基本數據類型 2、Integer變量必須實例化後才能使用,而int變量不需要 3、Integer實際是對象的引用,當new一個Integer時,實

Java intInteger的區別

body 類型轉換 per 區別 primitive ava ger class ron int是基本類型(Primitive),Integer是引用類型(Wrapper)。int是java的原始數據類型,Integer是java為int提供的封裝類。int的變量不需要實例

java面試題之intInteger的區別

4條 試題 als 自動 數據類型 類型 fort spec 新建 int和Integer的區別 1、Integer是int的包裝類,int則是java的一種基本數據類型 2、Integer變量必須實例化後才能使用,而int變量不需要 3、Integer實際是對象的引用,

intInteger,StringString(包裝類)

內存空間 mage image out info clas 技術 ima spa 1.int和Integer的值如果是一樣的,則是在內存中開辟相同的內存空間 2.但是String和String(包裝類)是不一樣的 代碼演示: int a=1;

2.intinteger的區別?

以前一直沒有思考,為啥要有一個int還要有一個integer。 實際上: 1. Ingeter是int的包裝類,int的初值為0,Ingeter的初值為null; 2.初始化的時候,int i =1;    Integer i= new Integer(1);

intInteger的區別 java

int和Integer的區別 java 1、Integer是int的包裝類,int則是java的一種基本資料型別 ; 2、Integer的預設值是null,int的預設值是0; 3、Integer變數必須例項化後才能使用,而int變數不需要 ; 4、Integer實際是物件的引用,當

intInteger的區別---之面試常考

int和Integer的區別 1、Integer是int的包裝類,int則是java的一種基本資料型別 2、Integer變數必須例項化後才能使用,而int變數不需要 3、Integer實際是物件的引用,當new一個Integer時,實際上是生成一個指標指向此物件;而int則是直接儲存資

java學習筆記(一)intInteger的區別

int和Integer的區別 1、Integer是int的包裝類,int則是java的一種基本資料型別 2、Integer變數必須例項化後才能使用,而int變數不需要 3、Integer實際是物件的引用,當new一個Integer時,實際上是生成一個指標指向此物件;而int則是直接儲存資料值

Java基礎之intInteger區別

1、int和Integer的區別 1、Integer是int的包裝類,int則是java的一種基本資料型別  2、Integer變數必須例項化後才能使用,而int變數不需要  3、Integer實際是物件的引用,當new一個Integer時,實際上是生成一個指標指向此物件;而

int Integer區別

stat app 基本數據 數據類型 編程 ble ger print public Java 是一個近乎純潔的面向對象編程語言,但是為了編程的方便還是引入不是對象的基本數據類型,但是為了能夠將這些基本數據類型當成對象操作,Java 為每一個基本數據類型都引入了對應的包裝類

基本資料型別包裝類的關係(以intInteger為例)

public void test(){ int a=10; Integer b=new Integer(10); Integer d= Integer.valueOf(10); Integer e= Integer.valueOf(10); Integer c=10; In

【Java基礎】intInteger

Java中存在8種基本資料型別:byte(8位)、short(16位)、int(32位)、long(64位)、float(32位)、double(64位)、char(16位,0x0000~0xffff)、boolean(true/false) java中不存在無符號數字型別,

Java基礎之intInteger有什麼區別

1 int與Integer的基本使用對比 (1)Integer是int的包裝類;int是基本資料型別;  (2)Integer變數必須例項化後才能使用;int變數不需要;  (3)Integer實際是物件的引用,指向此new的Integer物件;int是直接儲存資料值 ; 

java中intinteger的區別

1、Integer是int的包裝類,int則是java的一種基本資料型別 2、Integer變數必須例項化後才能使用,而int變數不需要 3、Integer實際是物件的引用,當new一個Integer時,實際上是生成一個指標指向此物件;而int則是直接儲存資料值