目錄
小故事" >小故事
引用型別" >引用型別
資料型別轉換" >資料型別轉換
#快取池" >#快取池
首頁 Java java教程 Java資料類型沒學會?因為姿勢沒用對!

Java資料類型沒學會?因為姿勢沒用對!

Jul 26, 2023 pm 05:24 PM
java

小故事

大家好,我是node哥哥,江湖人稱青哥,最近看那本很火的《Java從入門到入土》非常入迷,聽說在各大書城的銷售排行榜上穩居第一名?看來愛學習的小夥伴還是很多的呀!都說知識改變命運,Java成就人生,這麼看來我當初下定決心學習Java的選擇是多麼的正確!

Java資料類型沒學會?因為姿勢沒用對!

不過話說回來,這本書寫的確實不錯,但畢竟我剛入門,有一些小知識點還有點疑惑,比如剛學習的資料類型,這對於零基礎的我來說還是有些難度的。

這一天,我在CSDN上正無聊閒逛,看到一篇部落格:【資料結構與演算法05 ,紅黑樹 看完懂~ 】  。說實話看到這樣的文章我是非常不屑的,紅黑樹?是什麼樹?怎麼一半紅一半黑的?看完包包懂?萬一我懂一半呢?那不是難產了?哼!讓我來我看看你是什麼妖魔鬼怪。

小手輕輕一點,我進來了。一開始我是非常不以為然的,可是,越往下,我越吃驚……兩分鐘後,我差點跪下了!這寫的太好了吧,怎麼感覺比書裡講的還詳細的多呢(雖然沒看懂)!看看這滿滿的乾貨,這清新脫俗的文字,這滿屏幕的【知識】,我怎麼忍心錯過呢?還不讓他趕緊去我的收藏夾吃灰?看我關注、按讚、收藏,一波三連,把大佬安排的明明白白。

懷著激動的心情,我悄悄點開大佬的對話框。

:大佬,在嗎?

過了一小會,大佬居然回信了!

武哥:在~ 有什麼事嗎?

:(不知道怎麼組織語言)額..大佬…你很帥!太牛x了!

武哥:害!這不是公認的嗎?

:(一腦門黑線,敢情這大佬有點自戀啊,我只是商業吹捧一下,他還挺自居?)哈哈~大佬,是這樣的,我是一個學習Java的小白白,請問可以帶我嗎?

武哥:嗯…這個…也可以,我收費的哦

:(心想果然是大佬,還收費)大佬,我非常喜歡Java,最近還買了一本書學習,書名是《Java從入門到入土》,我覺得這本書蠻好,但我有點小疑惑,想請教下學習的小問題,你看能不能開個後門?

武哥:那…行吧。看在你這麼好學的份上,我就給你指點指點,你現在學到哪裡了?

:我剛學到Java基礎呢,看到資料結構這地方有點小懵圈~

武哥:這好說,我當年學Java基礎可足足花了大半年呢!基礎非常紮實的哦,我可以帶著你一起過這塊的知識點。

:真的嗎?大佬!那太感謝你了!回頭我請你吃飯!

武哥:小問題,小問題。我看你也在合肥?

:是呀~(有點慌,悄悄點開大佬的個人資料,莫非…)

武哥:哈哈,巧了!我也在呢!

:啊哈?這麼巧?那要不要…(看來一餐跑不掉了,我哭…)

武哥:你加我個微信,我給你發個定位,咱們細聊。

:(這就…面基了?才幾分鐘的交流?大佬都這麼騷的嗎?雖然心裡不太願意,但是身體卻很誠實)emm…好的,我這就過去…

武哥:好,等你哦~

我打了一個激靈…內心有一絲絲的慌張!

半小時後,我照武哥給的地址,搭計程車過來了。

見到武哥,果然,不出我所料,騷氣異常!

只見武哥梳一個大背頭,還抹了點油,斜靠在車上45°仰望天空,點一根煙,帶著無盡的滄桑和寂寞。

:(硬著頭皮上去打了個招呼)武哥?

武哥:(停下來抽煙的動作,看了我一眼,眼神帶著一絲迷離):Hello?你是node小哥哥嗎?

:嗯…是的(悄悄後退幾步)

武哥:(大步走過來,一把摟住我的肩膀)走,我們去咖啡店裡,喝杯咖啡,聊聊Java,如何?

:(心想你都這樣了,我還拒絕個屁啊!)好..的…

於是,武哥摟著我扭扭捏捏得去了星巴克…然後找了一個安靜的小包廂…

接下來的一幕估計你們能猜到了…

咳咳!正經點!我們是討論學習去的!

什麼?你不相信?

那你就往下看看,乾貨預警!

 

乾貨來了

##Java 數據類型有很多,本文主要從基本類型、包裝類型、引用類型和快取池四個面向來總結。

基本資料型別

基本資料型別有byte、short、int、long、float、double、boolean、char,關於它們的分類,我畫了個圖。

Java資料類型沒學會?因為姿勢沒用對!基本型別
接下來我主要從位元組數、資料範圍、預設值、以及用途等方面給大家總結成一個表格,一目了然。

Java資料類型沒學會?因為姿勢沒用對!

包裝資料類型

#上面提到的基本類型都有對應的包裝類型,為了方便讀者查看,我也整了一個表格。


Java資料類型沒學會?因為姿勢沒用對!


引用型別

在Java中,引用型別的變數非常類似 C/C 的指標。引用類型指向一個對象,指向對象的變數是引用變數。這些變數在宣告時被指定為一個特定的類型,例如 Student、Dog 等。變數一旦宣告後,類型就不能被改變了。

物件、陣列都是引用資料型別。所有引用類型的預設值都是null。一個引用變數可以用來引用任何與之相容的類型。例如:

Dog dog = new Dog("旺财")。

資料型別轉換

包裝型別和基本型別之間如何轉換呢?

Integer x = 2;     // 装箱 调用了 Integer.valueOf(2)
int y = x;         // 拆箱 调用了 X.intValue()

基本型別之間如何轉換呢?有兩個點:

  1. 把大容量的型別轉換成小容量的型別時必須使用強制型別轉換。

  2. 把小容量的型別轉換成大容量的型別可以自動轉換。

例如:

int i =128;   
byte b = (byte)i;
long c = i;

#快取池

大家思考一個問題:new Integer(123)Integer.valueOf(123) 有什麼不同?

有些人可能知道,有些人可能不知道。其實他們的差別很大。

  1. new Integer(123) 每次都会新建一个对象;

  2. Integer.valueOf(123) 会使用缓存池中的对象,多次调用会取得同一个对象的引用。

我写个demo大家就知道了

Integer x = new Integer(123);
Integer y = new Integer(123);
System.out.println(x == y);    // false
Integer z = Integer.valueOf(123);
Integer k = Integer.valueOf(123);
System.out.println(z == k);   // true

编译器会在自动装箱过程调用valueOf()方法,因此多个值相同且值在缓存池范围内的 Integer 实例使用自动装箱来创建,那么就会引用相同的对象。如:

Integer m = 123;
Integer n = 123;
System.out.println(m == n); // true

valueOf()方法的实现比较简单,就是先判断值是否在缓存池中,如果在的话就直接返回缓存池的内容。我们看下源码就知道。

public static Integer valueOf(int i) {
    if (i >= IntegerCache.low && i <= IntegerCache.high)
        return IntegerCache.cache[i + (-IntegerCache.low)];
    return new Integer(i);
}

根据数据类型的不一样,这个缓存池的上下限也不同,比如这个 Integer,就是 -128~127。不过这个上界是可调的,在启动 jvm 的时候,通过 -XX:AutoBoxCacheMax=来指定这个缓冲池的大小,该选项在 JVM 初始化的时候会设定一个名为 java.lang.IntegerCache.high 系统属性,然后 IntegerCache 初始化的时候就会读取该系统属性来决定上界。

参考自StackOverflow:

https://stackoverflow.com/questions/9030817/differences-between-new-integer123-integer-valueof123-and-just-123

 

OK,关于Java数据类型的小知识就分享到这了,虽然我还有点意犹未尽…

Java 的数据类型虽然简单,但是里面还是有很多小细节值得我们玩味的,希望这篇文章能给大家带来一些帮助。

以上是Java資料類型沒學會?因為姿勢沒用對!的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

撰寫PHP評論的提示 撰寫PHP評論的提示 Jul 18, 2025 am 04:51 AM

寫好PHP註釋的關鍵在於明確目的與規範,註釋應解釋“為什麼”而非“做了什麼”,避免冗餘或過於簡單。 1.使用統一格式,如docblock(/*/)用於類、方法說明,提升可讀性與工具兼容性;2.強調邏輯背後的原因,如說明為何需手動輸出JS跳轉;3.在復雜代碼前添加總覽性說明,分步驟描述流程,幫助理解整體思路;4.合理使用TODO和FIXME標記待辦事項與問題,便於後續追踪與協作。好的註釋能降低溝通成本,提升代碼維護效率。

通過評論提高可讀性 通過評論提高可讀性 Jul 18, 2025 am 04:46 AM

寫好註釋的關鍵在於說明“為什麼”而非僅“做了什麼”,提升代碼可讀性。 1.註釋應解釋邏輯原因,例如值選擇或處理方式背後的考量;2.對複雜邏輯使用段落式註釋,概括函數或算法的整體思路;3.定期維護註釋確保與代碼一致,避免誤導,必要時刪除過時內容;4.在審查代碼時同步檢查註釋,並通過文檔記錄公共邏輯以減少代碼註釋負擔。

編寫有效的PHP評論 編寫有效的PHP評論 Jul 18, 2025 am 04:44 AM

註釋不能馬虎是因為它要解釋代碼存在的原因而非功能,例如兼容老接口或第三方限制,否則看代碼的人只能靠猜。必須加註釋的地方包括複雜的條件判斷、特殊的錯誤處理邏輯、臨時繞過的限制。寫註釋更實用的方法是根據場景選擇單行註釋或塊註釋,函數、類、文件開頭用文檔塊註釋說明參數與返回值,並保持註釋更新,對複雜邏輯可在前面加一行概括整體意圖,同時不要用註釋封存代碼而應使用版本控制工具。

PHP開發環境設置 PHP開發環境設置 Jul 18, 2025 am 04:55 AM

第一步選擇集成環境包XAMPP或MAMP搭建本地服務器;第二步根據項目需求選擇合適的PHP版本並配置多版本切換;第三步選用VSCode或PhpStorm作為編輯器並搭配Xdebug進行調試;此外還需安裝Composer、PHP_CodeSniffer、PHPUnit等工具輔助開發。

PHP比較操作員 PHP比較操作員 Jul 18, 2025 am 04:57 AM

PHP比較運算符需注意類型轉換問題。 1.使用==僅比較值,會進行類型轉換,如1=="1"為true;2.使用===需值與類型均相同,如1==="1"為false;3.大小比較可作用於數值和字符串,如"apple"

PHP評論語法 PHP評論語法 Jul 18, 2025 am 04:56 AM

PHP註釋有三種常用方式:單行註釋適合簡要說明代碼邏輯,如//或#用於當前行解釋;多行註釋/*...*/適合詳細描述函數或類的作用;文檔註釋DocBlock以/**開頭,為IDE提供提示信息。使用時應避免廢話、保持同步更新,並勿長期用註釋屏蔽代碼。

有效的PHP評論 有效的PHP評論 Jul 18, 2025 am 04:33 AM

寫好PHP註釋的關鍵在於清晰、有用且簡潔。 1.註釋應說明代碼背後的意圖而非僅描述代碼本身,如解釋複雜條件判斷的邏輯目的;2.在魔術值、舊代碼兼容、API接口等關鍵場景添加註釋以提升可讀性;3.避免重複代碼內容,保持簡潔具體,並使用標準格式如PHPDoc;4.註釋需與代碼同步更新,確保准確性。好的註釋應站在他人角度思考,降低理解成本,成為代碼的理解導航儀。

團隊的PHP評論 團隊的PHP評論 Jul 18, 2025 am 04:28 AM

寫好PHP註釋的關鍵在於解釋“為什麼”而非“做什麼”,統一團隊註釋風格,避免重複代碼式註釋,合理使用TODO和FIXME標記。 1.註釋應重點說明代碼背後的邏輯原因,如性能優化、算法選擇等;2.團隊需統一註釋規範,如單行註釋用//,函數類用docblock格式,並包含@author、@since等標籤;3.避免僅複述代碼內容的無意義註釋,應補充業務含義;4.使用TODO和FIXME標記待辦事項,並可配合工具追踪,確保註釋與代碼同步更新,提升項目可維護性。

See all articles