大家好,我是node哥哥,江湖人稱青哥,最近看那本很火的《Java從入門到入土》非常入迷,聽說在各大書城的銷售排行榜上穩居第一名?看來愛學習的小夥伴還是很多的呀!都說知識改變命運,Java成就人生,這麼看來我當初下定決心學習Java的選擇是多麼的正確!
不過話說回來,這本書寫的確實不錯,但畢竟我剛入門,有一些小知識點還有點疑惑,比如剛學習的資料類型,這對於零基礎的我來說還是有些難度的。
這一天,我在CSDN上正無聊閒逛,看到一篇部落格:【資料結構與演算法05 ,紅黑樹 看完包懂~ 】 。說實話看到這樣的文章我是非常不屑的,紅黑樹?是什麼樹?怎麼一半紅一半黑的?看完包包懂?萬一我懂一半呢?那不是難產了?哼!讓我來我看看你是什麼妖魔鬼怪。
小手輕輕一點,我進來了。一開始我是非常不以為然的,可是,越往下,我越吃驚……兩分鐘後,我差點跪下了!這寫的太好了吧,怎麼感覺比書裡講的還詳細的多呢(雖然沒看懂)!看看這滿滿的乾貨,這清新脫俗的文字,這滿屏幕的【知識】,我怎麼忍心錯過呢?還不讓他趕緊去我的收藏夾吃灰?看我關注、按讚、收藏,一波三連,把大佬安排的明明白白。
懷著激動的心情,我悄悄點開大佬的對話框。
我:大佬,在嗎?
過了一小會,大佬居然回信了!
武哥:在~ 有什麼事嗎?
我:(不知道怎麼組織語言)額..大佬…你很帥!太牛x了!
武哥:害!這不是公認的嗎?
我:(一腦門黑線,敢情這大佬有點自戀啊,我只是商業吹捧一下,他還挺自居?)哈哈~大佬,是這樣的,我是一個學習Java的小白白,請問可以帶我嗎?
武哥:嗯…這個…也可以,我收費的哦
我:(心想果然是大佬,還收費)大佬,我非常喜歡Java,最近還買了一本書學習,書名是《Java從入門到入土》,我覺得這本書蠻好,但我有點小疑惑,想請教下學習的小問題,你看能不能開個後門?
武哥:那…行吧。看在你這麼好學的份上,我就給你指點指點,你現在學到哪裡了?
我:我剛學到Java基礎呢,看到資料結構這地方有點小懵圈~
武哥:這好說,我當年學Java基礎可足足花了大半年呢!基礎非常紮實的哦,我可以帶著你一起過這塊的知識點。
我:真的嗎?大佬!那太感謝你了!回頭我請你吃飯!
武哥:小問題,小問題。我看你也在合肥?
我:是呀~(有點慌,悄悄點開大佬的個人資料,莫非…)
武哥:哈哈,巧了!我也在呢!
我:啊哈?這麼巧?那要不要…(看來一餐跑不掉了,我哭…)
武哥:你加我個微信,我給你發個定位,咱們細聊。
我:(這就…面基了?才幾分鐘的交流?大佬都這麼騷的嗎?雖然心裡不太願意,但是身體卻很誠實)emm…好的,我這就過去…
武哥:好,等你哦~
我打了一個激靈…內心有一絲絲的慌張!
半小時後,我照武哥給的地址,搭計程車過來了。
見到武哥,果然,不出我所料,騷氣異常!
只見武哥梳一個大背頭,還抹了點油,斜靠在車上45°仰望天空,點一根煙,帶著無盡的滄桑和寂寞。
我:(硬著頭皮上去打了個招呼)武哥?
武哥:(停下來抽煙的動作,看了我一眼,眼神帶著一絲迷離):Hello?你是node小哥哥嗎?
我:嗯…是的(悄悄後退幾步)
武哥:(大步走過來,一把摟住我的肩膀)走,我們去咖啡店裡,喝杯咖啡,聊聊Java,如何?
我:(心想你都這樣了,我還拒絕個屁啊!)好..的…
於是,武哥摟著我扭扭捏捏得去了星巴克…然後找了一個安靜的小包廂…
接下來的一幕估計你們能猜到了…
咳咳!正經點!我們是討論學習去的!
什麼?你不相信?
那你就往下看看,乾貨預警!
在Java中,引用型別的變數非常類似 C/C 的指標。引用類型指向一個對象,指向對象的變數是引用變數。這些變數在宣告時被指定為一個特定的類型,例如 Student、Dog 等。變數一旦宣告後,類型就不能被改變了。
物件、陣列都是引用資料型別。所有引用類型的預設值都是null。一個引用變數可以用來引用任何與之相容的類型。例如:
Dog dog = new Dog("旺财")。
包裝型別和基本型別之間如何轉換呢?
Integer x = 2; // 装箱 调用了 Integer.valueOf(2) int y = x; // 拆箱 调用了 X.intValue()
基本型別之間如何轉換呢?有兩個點:
把大容量的型別轉換成小容量的型別時必須使用強制型別轉換。
把小容量的型別轉換成大容量的型別可以自動轉換。
例如:
int i =128; byte b = (byte)i; long c = i;
大家思考一個問題:new Integer(123)
與Integer.valueOf(123)
有什麼不同?
有些人可能知道,有些人可能不知道。其實他們的差別很大。
new Integer(123) 每次都会新建一个对象;
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=
参考自StackOverflow:
https://stackoverflow.com/questions/9030817/differences-between-new-integer123-integer-valueof123-and-just-123
OK,关于Java数据类型的小知识就分享到这了,虽然我还有点意犹未尽…
Java 的数据类型虽然简单,但是里面还是有很多小细节值得我们玩味的,希望这篇文章能给大家带来一些帮助。
以上是Java資料類型沒學會?因為姿勢沒用對!的詳細內容。更多資訊請關注PHP中文網其他相關文章!