網站首頁 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);調用方法:Integer的 valueOf(int) 方法
- 拆箱就是自動將 包裝器類型 轉換為 基本數據類型(Integer-->int)。調用方法:Integer的 intValue方法
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。
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相等嗎
原文鏈接:https://blog.csdn.net/weixin_45436143/article/details/134215270
- 上一篇:沒有了
- 下一篇:沒有了
相關推薦
- 2022-03-15 Maven安裝配置以及本地倉庫配置和阿里云鏡像設置
- 2023-11-13 【云原生】docker-compose安裝,解決Warning: the “docker“ comm
- 2022-09-17 docker安裝postgresql的圖文教程_docker
- 2022-05-20 python?特有語法推導式的基本使用_python
- 2021-10-01 Linux里LVM磁盤擴容詳細步驟_Linux
- 2022-04-06 關于.Net?6?添加NLog的方法_實用技巧
- 2022-03-27 NGINX?權限控制文件預覽和下載的實現原理_nginx
- 2023-09-18 Mybatis新增數據,存在就更新,不存在就添加
- 欄目分類
-
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支