我們來區(qū)別一下int和integer這個倆個的區(qū)別共同點(diǎn):
共同點(diǎn)呢:1、都是整型
? ? ? ? ? ? ? ? ? 2、范圍值都是 -2147483648(-2^31) 至 2147483647( ?2^31 ? - ? 1)是一樣的(32位)
? ? ? ? ? ? ? ? ? 3、其中使用equals比較的是值我們可以進(jìn)入源碼看一下其中的instanceof在java里面是表示這個實(shí)例類是否繼承了后面跟的那個類,其中&&是作為判斷,然后在繼續(xù)的先是Object這個類在強(qiáng)轉(zhuǎn)為Integer這個類,然后在進(jìn)行比較他們的value的值。所以比較的是類型是否一樣和值是否一樣其中只有Integer這個有equals這個方法。
不同點(diǎn)呢:1、就是Integer有equals這個方法。int沒有。
? ? ? ? ? ? ? ? ? 2、int的儲存大小是4個字節(jié)
? ? ? ? ? ? ? ? ? 3、int是JAVA缺省的8中基本數(shù)據(jù)類型之一,不是類。而Integer是一個類,繼承Number和接口comparable<Integer>
? ? ? ? ? ? ? ? ? 4、其中要注意的是 == 這個符號,兩個對象==比較的是棧的值。在int里面沒有影響~~,但是在Integer里面有不一樣的表現(xiàn)(看下面:注釋4)
注釋4:Integer a = new Integer(2)看里面的源碼可以知道

1、這個Integer這個類使用了構(gòu)造方法的形式我們?nèi)フ{(diào)用它,自己會判斷是不是Integer,不是話的對String類型進(jìn)行轉(zhuǎn)化為Integer類型。然后進(jìn)行賦值新的value,這個時候不可能是一個類型了。而且我們對new的印象應(yīng)該是開辟內(nèi)存,其中的 a指的是堆里面的地址,所以倆個new的對象==的比較實(shí)際上面比較的比的是內(nèi)存地址。所以必然是false。
2、Integer a =1 和Integer b = 1是一樣的,因?yàn)閚ew是開辟新的內(nèi)存,而直接賦值不一定是開辟新的。但是要注意這個賦值的又一個閥門。也就是臨界值??丛创a一下,

其中的i在128和-128之間不進(jìn)行new,就是沒有進(jìn)行開辟內(nèi)存,那如果Integer a = 129和Integer b = 129是一樣的嗎?是不一樣的。因?yàn)槌^128這個臨界值了,開辟了新內(nèi)存。
3、Integer a = new Integer(4) 和 Integer b = 4也是一樣的道理,所以是不一樣的。這個是一個是指向堆的地址,一個是指向?qū)iT存放內(nèi)存的地方。那么Integer a = new Integer(129)和Integer b = 129 這倆個也不一樣,但是原理是倆個指向堆的地址是不一樣的。
這樣的話,基本上面就說完了,關(guān)于這一塊的東西了。
二、現(xiàn)在來講一下關(guān)于Short和short這倆個的區(qū)別和共同點(diǎn):
共同點(diǎn):? ? ? ? ?1、都是短整型
? ? ? ? ? ? ? ? ? ? ? ? ?2、其中他們的取值范圍都是在-32768( ?-2^15 ?)至32767( ?2^15 ? - ? 1)(16位)其中我們可以看到源碼里面的0x是16進(jìn)制的表現(xiàn),可以轉(zhuǎn)化為10進(jìn)制15(F)*16^0+15*16^1+15*16^2+7*16^3=32768(其中的F是15)

不同點(diǎn):和上面的說的int和Integer一樣的
三、關(guān)于long和Long
共同點(diǎn):? ? ? ? ? 1、長整型
? ? ? ? ? ? ? ? ? ? ? ? ?2、取值范圍是?-9,223,372,036,854,775,808至 9,223,372,036,854,775,807(去源碼看吧~~~~)64位
不同點(diǎn):和上述一樣
四、關(guān)于byte和Byte的
共同點(diǎn):1、都是字節(jié)
? ? ? ? ? ? ? ? ? ? ? ? ?2、范圍都是-128至127(8位)
不同點(diǎn):一樣的
五:關(guān)于float和Float
? ? ? 共同點(diǎn):1、浮點(diǎn)型
? ? ? ? ? ? ? ? ? ? 2、取值范圍32位浮點(diǎn)1.40129846432481707e-45f至3.40282346638528860e+38f
? ? ? 不同點(diǎn):使用的是compare比較大小
?六:double和Double
共同點(diǎn):? ? ? ? ?1、浮點(diǎn)型
? ? ? ? ? ? ? ? ? ? ? ? 2、64位浮點(diǎn),一般非整數(shù)浮點(diǎn)可用這個。5e-324至1.79769313486231570e+308
不同點(diǎn):使用的是compare比較大小
七:char和Character
共同點(diǎn):1、是字節(jié)類型
? ? ? ? ? ? ? 2、char 在java中是2個字節(jié)。java采用unicode,2個字節(jié)(16位)來表示一個字符
其中在安卓源碼的里面沒有看到過Char這個東東。然后呢看到Character這個東東。繼承了char這個玩意。
八:boolean和Boolean
boolean x =false;
Map map=new HashMap();
map.put("x", x);
Boolean x = (Boolean)map.get(t);
唯一只能使用Boolean上的就是從列表或者哈希表獲取值時。
只能用Boolean強(qiáng)制轉(zhuǎn)換,不能使用boolean.
九、String(不算基本數(shù)據(jù)類型) Stringbuffer、Stringbuilder(非線程安全)
1、不經(jīng)常變化的字符串,使用String就可以。而經(jīng)常變化、正在拼裝的字符串不用String。
2、若是全局變量,可能多線程引用,建議使用StringBuffer;
3、若是局部變量,單線程使用,推薦StringBuilder。
4、 在編譯階段就能夠確定的字符串常量,完全沒有必要創(chuàng)建String或StringBuffer對象。直接使用字符串常量的"+"連接操作效率最高。
5、StringBuffer對象的append效率要高于String對象的"+"連接操作。
6、 不停的創(chuàng)建對象是程序低效的一個重要原因。那么相同的字符串值能否在堆中只創(chuàng)建一個String對象。
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
來源:CSDN
原文:https://blog.csdn.net/fox_wei_hlz/article/details/74451918