亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Java中Integer和int的區(qū)別解讀

 更新時間:2023年12月29日 09:50:30   作者:理想萬歲萬萬歲  
這篇文章主要介紹了Java中Integer和int的區(qū)別解讀,大家都知道他可以表示一個整數(shù),而且也知道可以表示整數(shù)的還有int,只是使用Integer的次數(shù)要比int多得多,今天我們就來好好探究一下Integer與int的區(qū)別以及更深處的知識,需要的朋友可以參考下

一、介紹

各位小伙伴們無論在工作還是學習中,與Integer都有著過硬的交情,我說的沒錯吧,大家都知道他可以表示一個整數(shù),而且也知道可以表示整數(shù)的還有int,只是使用Integer的次數(shù)要比int多得多,今天我們就來好好探究一下Integer與int的區(qū)別以及更深處的知識。

二、不同點

Integer是包裝類型(即引用類型),int是基本類型。

也就是說,Integer是一個類,里面有很多方法可以使用,例如

boolean equals(Object obj){...}
int compareTo(Integer anotherInteger){...}

而int不是一個類,能做的只有+、-、*、/、=五種運算,例如

int a = 3;  
int b = 4; 
int c = a + b;

Integer的默認值是null,int的默認值是0

在這里插入圖片描述

Integer變量使用之前必須先實例化,int變量可以直接使用。

Integer如果沒有實例化就直接使用會報空指針異常(因默認值為null);int如果沒有初始化則使用默認值0。

三、相同點

取值范圍相同

最小值:Integer.MIN_VALUE= -2147483648 (-2的31次方)

最大值:Integer.MAX_VALUE= 2147483647 (2的31次方-1)

在這里插入圖片描述

原因:眾所周知,整型變量在內存中的字節(jié)數(shù)是4個字節(jié),一個字節(jié)是8位,因此一個整型變量占據(jù)32位,且首位為0表示非負數(shù),1表示負數(shù)。

四、使用equals()和==的區(qū)別

對于每個java開發(fā)人員來說,Integer的用法再熟悉不過了,但仍然會有些工作一兩年的小伙伴依然搞不清楚不同情況下equals()方法和 == 等號究竟有什么結果,以至于在基礎的面試過程中翻跟頭體驗屢試不爽。這次我們一次性把所有可能以及結果出清楚。

equals()

此方法由Object類定義,在Integer類中又對其進行了重寫,我們來看一下重寫后的方法。

public boolean equals(Object obj) {
        if (obj instanceof Integer) {
            return value == ((Integer)obj).intValue();
        }
        return false;
}

這個方法先判斷參數(shù)對象是否繼承了Integer引用類型(如果參數(shù)是int基本類型,會先將其自動裝箱成引用類型),如果沒有繼承Integer引用類型,則返false,這個很好理解,如果數(shù)字和字符相比,那叫什么事嘛。如果繼承了Integer引用類型,就先把它強轉成Integer類型,再通過intValue()方法將其拆箱為int基本類型,再和value進行地址比較(==右邊的value表示的是此Integer對象在常量池中的值,該值其實也是及本來想常量)。

? 說了一大堆,簡單一句話就是equals()方法進行的是常量池中的地址是否相等。

? 另外一點:常量池中值相等的數(shù)據(jù)不會同時出現(xiàn),常量池中只保存一份相同的值。

==

比較兩個對象在內存中的地址是否相等。

下面是我們使用equals()方法和==方法來判斷Integer和int的區(qū)別。在此之前,我們要先知道裝箱和拆箱、常量池對象和堆內存對象兩個概念:

裝箱

將基本數(shù)據(jù)類型變成引用類型的過程。發(fā)生在將基本數(shù)據(jù)類型賦值給引用類型的時候, 如Integer i = 5;

拆箱

將引用類型變成基本數(shù)據(jù)類型的過程。發(fā)生在將引用類型和基本數(shù)據(jù)類型做運算的時候,如下所示

Integer i = 5; 
int j = 5; 
System.out.println(i==j);

常量池對象

保存的是創(chuàng)建對象時的字面量,相等的字面量只保存一次

堆內存對象

保存的是new一個對象時這個對象在堆內存中的地址

聲明變量使用equals()方法比較使用==比較
1Integer i = new Integer(1);
Integer j = new Integer(1);
truefalse
2Integer i = new Integer(1);
Integer j = 1;
truefalse
3Integer i = new Integer(1);
int j = 1;
truetrue
4Integer i = 1;
Integer j = 1;
truetrue
5Integer i = 1;
int j = 1;
truetrue
6int i = 1;
int j = 1;
——true
7Integer i = new Integer(128);
Integer j = new Integer(128);
truefalse
8Integer i = new Integer(128);
Integer j = 128;
truefalse
9Integer i = new Integer(128);
int j = 128;
truetrue
10Integer i = 128;
Integer j = 128;
truefalse
11Integer i = 128;
int j = 128;
truetrue
12int i = 128;
int j = 128;
——true

情況1

在Integer i = new Integer(1)的過程中,java為我們做了兩件事,先在常量池中創(chuàng)建一個int=1的常量,再在堆內存中創(chuàng)建一個對這個常量的地址引用,因此在用equals()方法時比較的是常量池中int=1這個常量,自己和自己比較的結果當然為true;

而在==運算時,直接比較了堆內存中的地址,于是比較的結果為false

情況2

在Integer j = 1的過程中,實際上是java為我們在常量池中生成了一個常量對象1,然后j對象指向這個常量對象的地址。

equals()運算結果為true是因為比較的是常量池中對象的比較,實際上常量池中只有一個值為1的對象,即自己比較自己。

==運算結果為false是因為比較的是堆內存中對象j的地址和常量池中常量對象1的地址,是兩個不同的地址比較

情況3

equals()運算結果為true可以參考上面的源碼以及下方解釋

==運算結果為true是因為引用類型Integer和基本數(shù)據(jù)類型int比較時,引用類型會自動拆包裝為int,然后進行比較,實際上就變?yōu)閮蓚€int變量的比較,也是堆內存中常量自己與自己的地址比較

情況4

變量i與變量j指向的其實都是常量池中的常量對象1,因此equals()運算和==運算的結果都是true

情況5

與情況4相同, 如果有疑惑可在文章后面查找答案

情況6

基本數(shù)據(jù)類型只能進行加、減、乘、除、等于五種運算,沒有equals()方法,==運算為true還是因為堆內存中常量自己與自己進行地址比較。

情況7

new Integer(128)會先在常量池中創(chuàng)建一個常量對象128,再在堆內存中保存這個常量對象的地址,Integer i = new Integer(128)中變量i指向堆內存中保存這個常量對象地址的地址,它是指向堆內存的??梢岳斫鉃閮蓚€不同的堆內存地址指向相同的常量池地址。

equals()運算結果為true是因為比較的是常量池中的地址,而該地址只有一個,自己比較自己,結果為true

==運算比較的是這兩個堆內存的地址,因此結果為false

情況8

equals()運算結果為true說了很多遍了,都是同一個原因

==運算為false是因為比較的是堆內存中兩個對象的地址,原因和情況5相同,可在文章后面查找答案

情況9

與情況3相同

情況10

與情況8相同,可在文章后面查找答案

情況11

與情況3相同

情況12

與情況6相同

五、解惑

JVM中一個字節(jié)一下的整型數(shù)據(jù)(即[128,127])會在JVM啟動時加載進內存,除非用new Integer()顯示的創(chuàng)建對象,否則都是同一對象。當使用Integer i = 1時,會將1這個數(shù)字進行緩存,下次再運行Integer j = 1時,就會直接從緩存中取,就不會new了, 這樣取到的1 地址也是相同的, ==判斷返回true。

對于-128 ~ 127范圍之外的數(shù) 實際上就是new得到的, 地址不同==判斷為false

java在編譯Integer i = 100 ;時,java內部會將其翻譯成為Integer i = Integer.valueOf(100);

所以關鍵就是看valueOf()函數(shù)了。JDK源碼的valueOf()是這樣的

在這里插入圖片描述

到此,Integer與int運算時的迷之操作總算解釋清楚了,如果有需要指正或者補充的,請小伙伴們掃下方二維碼關注公眾號并在后臺留言,我會及時給予回復,讓我們一起把java學到荒,頭發(fā)掉到光。

到此這篇關于Java中Integer和int的區(qū)別解讀的文章就介紹到這了,更多相關Integer和int的區(qū)別內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • spring boot中使用RabbitMQ routing路由詳解

    spring boot中使用RabbitMQ routing路由詳解

    本篇文章主要介紹了spring boot中使用RabbitMQ routing路由詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-03-03
  • Java Map遍歷2種實現(xiàn)方法代碼實例

    Java Map遍歷2種實現(xiàn)方法代碼實例

    這篇文章主要介紹了Java Map遍歷2種實現(xiàn)方法代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-10-10
  • Java使用ChatGPT的API詳解

    Java使用ChatGPT的API詳解

    OpenAI API 幾乎可以應用于任何涉及理解或生成自然語言或代碼的任務。本文將帶你們介紹Java如何使用ChatGPT的API,感興趣的同學可以跟著小編一起來學習
    2023-04-04
  • mybatis中返回多個map結果問題

    mybatis中返回多個map結果問題

    這篇文章主要介紹了mybatis中返回多個map結果問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • 多個java泛型示例分享

    多個java泛型示例分享

    這篇文章主要介紹了多個java泛型示例,需要的朋友可以參考下
    2014-04-04
  • SpringBoot 增量部署發(fā)布的實現(xiàn)步驟

    SpringBoot 增量部署發(fā)布的實現(xiàn)步驟

    本文介紹了通過拆分項目jar包和使用類加載器實現(xiàn)Spring Boot的增量部署,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2024-12-12
  • MyBatis-Plus流式查詢的實現(xiàn)示例

    MyBatis-Plus流式查詢的實現(xiàn)示例

    MyBatis-Plus 從 3.5.4 版本開始支持流式查詢,通過ResultHandler接口實現(xiàn)結果集的流式查詢,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2024-12-12
  • spring boot多數(shù)據(jù)源動態(tài)切換代碼實例

    spring boot多數(shù)據(jù)源動態(tài)切換代碼實例

    這篇文章主要介紹了spring boot多數(shù)據(jù)源動態(tài)切換代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-01-01
  • 詳解Java如何使用Jsoup修改HTML元素的屬性

    詳解Java如何使用Jsoup修改HTML元素的屬性

    Jsoup?是一個強大的?Java?庫,用于解析和操作?HTML?文檔,本文主要為大家介紹了如何使用Jsoup進行修改HTML元素的屬性,感興趣的可以了解下
    2025-01-01
  • ???????Spring多租戶數(shù)據(jù)源管理 AbstractRoutingDataSource

    ???????Spring多租戶數(shù)據(jù)源管理 AbstractRoutingDataSource

    本文技術了???????Spring多租戶數(shù)據(jù)源管理 AbstractRoutingDataSource,下文詳細內容介紹,需要的小伙伴可以參考一下
    2022-05-05

最新評論