基本类型优先于装箱基本类型
生活随笔
收集整理的這篇文章主要介紹了
基本类型优先于装箱基本类型
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
?基本類型與包裝類型的主要區(qū)別在于以下三個(gè)方面:
1、基本類型只有值,而包裝類型則具有與它們的值不同的同一性(identity)。這個(gè)同一性是指,兩個(gè)引用是否指向同一個(gè)對(duì)象,如果指向同一個(gè)對(duì)象,則說明具有同一性。(與此類似的還有等同性。)
2、基本類型只有功能完備的值,而包裝類型除了其對(duì)應(yīng)的基本類型所有的功能之外,還有一個(gè)非功能值:null。
3、基本類型通常比包裝類型更節(jié)省時(shí)間與空間。
?
1 package com;2 3 import java.util.Comparator;4 5 /**6 * Created by huyanxia on 2017/11/27.7 */8 public class TestInteger {9 public static Integer i; 10 11 public static void main(String[] args) { 12 Integer a = i; 13 //int j = i; 14 /* 1.因?yàn)镮nteger轉(zhuǎn)換為int時(shí),會(huì)首先進(jìn)行自動(dòng)拆箱,但是若為null,就會(huì)出現(xiàn)空指針異常*/ 15 //輸出null,Integer默認(rèn)為null 16 System.out.println("輸出" + a); 17 //java.lang.NullPointerException 18 System.out.println("輸出" + i); 19 /* 2.因?yàn)閳?zhí)行first < second 時(shí),會(huì)自動(dòng)拆箱,再執(zhí)行first == second時(shí)會(huì)執(zhí)行同一性(引用是否指向同一個(gè)對(duì)象,若是為true) 20 比較,即first和second引用表示同一個(gè)int 值的不同的Interger實(shí)例,那么就會(huì)返回false,比較器就會(huì)錯(cuò)誤的返回1*/ 21 //大小1; 22 System.out.println("大小" + order.compare(new Integer(42), new Integer(42))); 23 //大小0 24 System.out.println("大小" + order.compare(42, 42)); 25 26 /* 3.Integer的常量池是由-128至127組成。當(dāng)我們給一個(gè)Integer賦的值在這個(gè)范圍之類時(shí)就直接會(huì)從緩存返回一個(gè)相同的引用, 27 所以m1 == n1,m3 == n3會(huì)輸出true。而超過這個(gè)范圍時(shí),就會(huì)重新new一個(gè)對(duì)象。因此,m == n,m4 == n4就會(huì)輸出一個(gè)false。*/ 28 // false 29 Integer m = 980; 30 Integer n = 980; 31 System.out.println("結(jié)果:" + (m == n)); 32 //true 33 Integer m1 = 127; 34 Integer n1 = 127; 35 System.out.println("結(jié)果:" + (m1 == n1)); 36 //false 37 Integer m2 = 128; 38 Integer n2 = 128; 39 System.out.println("結(jié)果:" + (m2 == n2)); 40 //true 41 Integer m3 = -128; 42 Integer n3 = -128; 43 System.out.println("結(jié)果:" + (m3 == n3)); 44 //false 45 Integer m4 = -129; 46 Integer n4 = -129; 47 System.out.println("結(jié)果:" + (m4 == n4)); 48 /* 4.基本類型只有值,而包裝類型則具有與它們的值不同的同一性(identity)。這個(gè)同一性是指,兩個(gè)引用是否指向同一個(gè)對(duì)象, 49 如果指向同一個(gè)對(duì)象,則說明具有同一性。(與此類似的還有等同性。)*/ 50 //false 51 Integer m5 = new Integer(127); 52 Integer n5 = new Integer(127); 53 System.out.println("結(jié)果:" + (m5 == n5)); 54 55 /* 5.基本類型通常比包裝類型更節(jié)省時(shí)間與空間。因?yàn)?#xff0c;在聲明sum變量的時(shí)候,一不小心聲明為L(zhǎng)ong, 56 而不是long。這樣,在這個(gè)循環(huán)當(dāng)中就會(huì)不斷地裝箱和拆箱,其性能也會(huì)明顯的下降。但是,將Long改成long時(shí)間消耗會(huì)縮短很多*/ 57 //4999950000,時(shí)間:14ms 58 long startTime = System.currentTimeMillis(); 59 Long sum = 0L; 60 for(long i = 0;i < 100000; i++){ 61 sum +=i; 62 } 63 System.out.println(sum + ",時(shí)間:" + (System.currentTimeMillis() - startTime) + "ms"); 64 65 //4999950000,時(shí)間:3ms 66 long startTime1 = System.currentTimeMillis(); 67 long sum1 = 0; 68 for(long i = 0;i < 100000;i++){ 69 sum1 +=i; 70 } 71 System.out.println(sum1 + ",時(shí)間:" + (System.currentTimeMillis() - startTime1) + "ms"); 72 73 /* 因?yàn)閕nt的最大值為 2147483647,而累加超過 2147483647,就會(huì)變成負(fù)數(shù),所以int的累加結(jié)果小*/ 74 //704982704,時(shí)間:7ms 75 long startTime2 = System.currentTimeMillis(); 76 Integer sum2 = 0; 77 for(int i = 0;i < 100000;i++){ 78 sum2 +=i; 79 } 80 System.out.println(sum2 + ",時(shí)間:" + (System.currentTimeMillis() - startTime2) + "ms"); 81 82 //704982704,時(shí)間:2ms 83 long startTime3 = System.currentTimeMillis(); 84 int sum3 = 0; 85 for(int i = 0;i < 100000;i++){ 86 sum3 +=i; 87 } 88 System.out.println(sum3 + ",時(shí)間:" + (System.currentTimeMillis() - startTime3) + "ms"); 89 } 90 static Comparator<Integer> order = new Comparator<Integer>() { 91 @Override 92 public int compare(Integer first, Integer second) { 93 return first < second ? -1 : (first == second ? 0 : 1); 94 } 95 }; 96 }?
適合包裝類型的三個(gè)情況:
1、作為集合中的元素、鍵和值。
2、在參數(shù)化類型中。比如:你不能這樣寫——ArryList<int>,你只能寫ArrayList<Integer>.
3、在進(jìn)行反射方法的調(diào)用時(shí)。
總結(jié)
以上是生活随笔為你收集整理的基本类型优先于装箱基本类型的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 美国如果实行负利率,债务压力就能减轻,为
- 下一篇: SharePoint 站点结构及概念