2019-01-09 安卓 Int和Integer的區(qū)別之處,以及其他的八個區(qū)別

我們來區(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

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Lua 5.1 參考手冊 by Roberto Ierusalimschy, Luiz Henrique de F...
    蘇黎九歌閱讀 14,246評論 0 38
  • pyspark.sql模塊 模塊上下文 Spark SQL和DataFrames的重要類: pyspark.sql...
    mpro閱讀 9,914評論 0 13
  • 一、基礎(chǔ)知識:1、JVM、JRE和JDK的區(qū)別:JVM(Java Virtual Machine):java虛擬機(jī)...
    殺小賊閱讀 2,563評論 0 4
  • 一個地道的文科生,一個半成品的文學(xué)系學(xué)生,畢業(yè)后就再也沒有長篇大論的寫過文章了,幾乎喪失了寫作的能力。即便如此,還...
    Elaine_bubu閱讀 1,216評論 5 18
  • 最近,偶然發(fā)現(xiàn)有音頻類的APP很火,便也下載了一個。這個還真不錯:小說、相聲、童話故事、古詩詞解讀……幾乎囊括了所...
    馮小高閱讀 396評論 4 9

友情鏈接更多精彩內(nèi)容