首頁 > Java > java教程 > Java資料類型沒學會?因為姿勢沒用對!

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

發布: 2023-07-26 17:24:00
轉載
1465 人瀏覽過

小故事

大家好,我是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中文網其他相關文章!

相關標籤:
來源:Java学习指南
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板