您好,登錄后才能下訂單哦!
本篇內(nèi)容主要講解“Java中Int、Integer、Integer.valueOf()、new Integer()之間的區(qū)別是什么”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Java中Int、Integer、Integer.valueOf()、new Integer()之間的區(qū)別是什么”吧!
Int是Java八種基本數(shù)據(jù)類型之一,一般大小為4字節(jié)32位,取值范圍為2-31—231。兩個Int類型變量用“==”比較的是值的大小。
package com.company.algorithm; public class Main { public static void main(String[] args) { int a = 100; int b = 100; System.out.println(a == b);//true } }
將Int值賦給Integer變量,系統(tǒng)會自動將這個Int值封裝成一個Integer對象。
比如:Integer a = 100;實際上的操作是:Integer a = Integer.valueOf(100);
以下是valueOf()的源碼
注意:這里Integer.valueOf(),當Int值的范圍在-128-127之間時,會通過一個IntegerCache緩存來創(chuàng)建Integer對象;當Int值不在該范圍時,直接調(diào)用new Integer()來創(chuàng)建對象,因此會出現(xiàn)以下的情況
(1)Integer a = 100; Integer b = 100; a==b結(jié)果為true,因為這兩個Integer變量引用的是緩存中的同一個Integer對象 ;
(2)Integer c = 200; Integer d = 200; a==b結(jié)果為false,因為a和b是通過new Integer() 創(chuàng)建的兩個不同對象。
package com.company.algorithm; public class Main { public static void main(String[] args) { Integer a = 100; Integer b = 100; Integer c = 200; Integer d = 200; System.out.println(a == b);//true System.out.println(c == d);//false } }
new Integer()每次都會創(chuàng)建新的對象,==比較的是兩個對象的內(nèi)存地址
package com.company.algorithm; public class Main { public static void main(String[] args) { Integer a = new Integer(100); Integer b = new Integer(100); System.out.println(a == b);//false } }
(1)不管是new創(chuàng)建的Integer對象,還是通過直接賦值Int值創(chuàng)建的Integer對象,它們與Int類型變量通過“==”進行比較時都會自動拆箱變成Int類型,所以Integer對象和Int變量比較的是內(nèi)容大小。
package com.company.algorithm; public class Main { public static void main(String[] args) { int a = 100; Integer b = 100;//等價于b=Integer.valueOf(100); Integer c = new Integer(100); System.out.println(a == b);//true System.out.println(a == c);//true } }
(2)new創(chuàng)建的Integer對象和直接賦Int值創(chuàng)建的Integer對象使用==比較的是它們的內(nèi)存地址。
package com.company.algorithm; public class Main { public static void main(String[] args) { Integer b = 100;//等價于b=Integer.valueOf(100); Integer c = new Integer(100); System.out.println(b == c);//false } }
(3)賦Int值創(chuàng)建的Integer對象比較:
當Int值在-128-127之間時,兩個Integer變量引用的是IntegerCache中的同一個對象,內(nèi)存地址相同,因此==的結(jié)果為true;
當Int值不在以上范圍時,兩個Integer對象都是通過new創(chuàng)建的,內(nèi)存地址不同,因此==的結(jié)果為false
package com.company.algorithm; public class Main { public static void main(String[] args) { Integer a = 100; Integer b = 100; Integer c = 200; Integer d = 200; Integer f = new Integer(100); System.out.println(a == b);//true System.out.println(c == d);//false System.out.println(a == f);//false } }
一個金典面試題
package com.company.algorithm; public class Main { public static void main(String[] args) { Integer a = 49; int b = 49; Integer c = Integer.valueOf(49); Integer d = new Integer(49); System.out.println(a == b);//true System.out.println(a == c);//true System.out.println(b == c);//true System.out.println(c == d);//false } }
到此,相信大家對“Java中Int、Integer、Integer.valueOf()、new Integer()之間的區(qū)別是什么”有了更深的了解,不妨來實際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進入相關(guān)頻道進行查詢,關(guān)注我們,繼續(xù)學習!
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。