日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 java綜合 正文

1. Int 和Integer 的區別,Java為什么要設計成封裝類型?

作者:luna綠蘿在成長 更新時間: 2024-07-22 java綜合

? 1. Int 和Integer 的區別,Java為什么要設計成封裝類型?

(考察點:面向對象的理解,封裝類型的特性和功能;

Integer是基本數據類型int的封裝類,在java中8大基本數據類型 它的封裝類是一一對應的。他們的區別有很多,比如,

第一個,int類型,我們可以直接定義一個變量名賦值即可,但是Integer需要使用new關鍵字創建對象;

第二個,基本類型和Integer 類型混合使用的時候,Java會自動通過拆箱和裝箱實現類型的轉換;

第三個,Integer 作為一個對象類型,封裝了一些方法和屬性,我們可以使用這些方法來操作數據。

第四個,作為成員變量,Integer的初始值是null,int的初始值是0;

第五個,Integer 它是存儲在堆內存里面,因為它是一個對象,int 類型是直接存儲在??臻g(先進后出);

為什么要設計成封裝類型?

我認為主要的原因是,Java本身它是一個面向對象的語言,一切的操作都是以對象作為基礎的,比如說 集合里面存的元素,也只支持存儲Object類型,普通類型是無法通過集合來存儲的。安全性好,隱藏了實現細節,對使用者更加友好。

裝箱操作,內存地址,享元模式,互用對象

2. 說說Java自動裝箱與拆箱?

  • 裝箱就是自動將 基本數據類型 轉換為 包裝器類型(int-->Integer);調用方法:IntegervalueOf(int) 方法
  • 拆箱就是自動將 包裝器類型 轉換為 基本數據類型(Integer-->int)。調用方法:IntegerintValue方法
?

3. 追問:?Integer a1= 127 與 Integer a2?= 127相等嗎

?Integer a1= 100與 Integer a2= 100 相等嗎?

考察目標:== 內存地址匹配, 裝箱拆箱 ,Integer 內部的設計原理,(享元模式 通過復用對象 減少對象的創建數量,減少內存占用和提升性能)

高手回答:

a1==a2?的結果都是是True, 原因Integer ?內部用到了一個享元模式,也就是針對于-128 到127之間的數字做了一個緩存,使用Integer a1= 100這個方式 賦值的時候, java 默認會通過value 對100 這個數字進行裝箱操作,從而觸發了緩存機制,使得 a1和a2 指向了同一個Integer 的內存地址。

因為值都是100 ,并且默認通過裝箱機制調用了valueOf方法從IntegerCache中拿到了兩個完全相同的Integer實例。因此用等號比較得到的結果必然是true。

面試題 1
以下代碼會輸出什么?
public class Main {
 public static void main(String[] args) {
 
 Integer i1 = 100;
 Integer i2 = 100;
 Integer i3 = 200;
 Integer i4 = 200;
 
 System.out.println(i1==i2);
 System.out.println(i3==i4);
 }
}

?輸出結果:
true
false
?輸出結果表明i1和i2指向的是同一個對象,而i3和i4指向的是不同的對
象。

4. 那如果是Double 類型的呢,?Double a1= 127 與 Double a2?= 127相等嗎?Double a1= 200.0與 Double a2?= 200.0相等嗎

輸出結果為false ,false
注意:?在某個范圍內的整型數值的個數是有限的,而浮點數卻不是。

原文鏈接:https://blog.csdn.net/weixin_45436143/article/details/134215270

  • 上一篇:沒有了
  • 下一篇:沒有了
欄目分類
最近更新