天天看點

從JDK源碼角度看Short

Java的Short類主要的作用就是對基本類型short進行封裝,提供了一些處理short類型的方法,比如short到String類型的轉換方法或String類型到short類型的轉換方法,當然也包含與其他類型之間的轉換方法。

<code>MIN_VALUE</code>靜态變量表示short能去的最小值,為-32768(-2的15此方),被final修飾說明不可變。

類似的還有<code>MAX_VALUE</code>,表示short最大值為32767(2的15次方減1)。

<code>SIZE</code>用來表示二進制補碼形式的short值的比特數,值為16,靜态變量且不可變。

<code>BYTES</code>用來表示二進制補碼形式的short值的位元組數,值為<code>SIZE</code>除于<code>Byte.SIZE</code>,結果為2。

<code>TYPE</code>的toString的值是<code>short</code>。

Class的<code>getPrimitiveClass</code>是一個native方法,在<code>Class.c</code>中有個<code>Java_java_lang_Class_getPrimitiveClass</code>方法與之對應,是以JVM層面會通過<code>JVM_FindPrimitiveClass</code>函數會根據”short”字元串獲得jclass,最終到Java層則為<code>Class&lt;Short&gt;</code>。

當<code>TYPE</code>執行toString時,邏輯如下,則其實是<code>getName</code>函數決定其值,<code>getName</code>通過native方法<code>getName0</code>從JVM層擷取名稱,

<code>getName0</code>根據一個數組獲得對應的名稱,JVM根據Java層的Class可得到對應類型的數組下标,比如這裡下标為9,則名稱為”short”。

兩個parseShort方法,主要看第一個即可,第一個參數是待轉換的字元串,第二個參數表示進制數,這裡的轉換其實是調了Integer的parseInt方法,傳回值再判斷是不是在short的最小值和最大值之間。怎麼更好了解這個參數呢?舉個例子,<code>Short.parseShort("100",10)</code>表示十進制的100,是以值為100,而<code>Short.parseShort("100",2)</code>表示二進制的100,是以值為4。另外如果<code>Short.parseShort("100000",10)</code>會抛出<code>java.lang.NumberFormatException</code>異常。

包含兩種構造函數,分别可以傳入short和String類型。它是通過調用parseShort方法進行轉換的,是以轉換邏輯與上面的parseShort方法一樣。

一個是靜态方法一個是非靜态方法,但兩個方法轉換的效果是一樣的,都是以十進制形式轉換。

ShortCache是Short的一個内部類,它包含了short可能值的Short數組,範圍是[-128,127],它不會像Byte類将所有可能值緩存起來,因為Short類型範圍很大,将它們全部緩存起來代價太高,而Byte類型就是從-128到127,一共才256個。是以這裡隻執行個體化256個Short對象,當Short的值範圍在[-128,127]時則直接從緩存中擷取對應的Short對象,不必重新執行個體化。當然這些緩存值都是靜态且final的,避免重複的執行個體化和回收。

有三個valueOf方法,主要看上面這個,因為ShortCache緩存了[-128,127]值的Short對象,對于在範圍内的直接從ShortCache的數組中擷取對應的Short對象即可,而在範圍外的則需要重新執行個體化了。

decode方法主要作用是解碼字元串轉成Short型,比如<code>Short.decode("11")</code>的結果為11,而<code>Short.decode("0x11")</code>結果為17,因為後面的是十六進制,它會根據實際情況進行解碼。

包括shortValue、intValue、longValue、byteValue、floatValue和doubleValue等方法,其實就是轉換成對應的類型。

hashCode方法很簡單,就是直接傳回int類型的值。

比較是否相同時先判斷是不是Short類型再比較值。

通過相減來比較,大于0則說明x大于y。

包括轉成無符号int型和無符号long型。

以下是廣告和相關閱讀

========廣告時間========

<a href="http://blog.csdn.net/wangyangzhizhou/article/details/74080321">為什麼寫《Tomcat核心設計剖析》</a>

=========================

相關閱讀:

<a href="http://blog.csdn.net/wangyangzhizhou/article/details/73743876">從JDK源碼角度看Object</a>

<a href="http://blog.csdn.net/wangyangzhizhou/article/details/72933108">談談Java基礎資料類型</a>

<a href="http://blog.csdn.net/wangyangzhizhou/article/details/51455094">從JDK源碼角度看并發鎖的優化</a>

<a href="http://blog.csdn.net/wangyangzhizhou/article/details/51468764">從JDK源碼角度看線程的阻塞和喚醒</a>

<a href="http://blog.csdn.net/wangyangzhizhou/article/details/51433204">從JDK源碼角度看并發競争的逾時</a>

<a href="http://blog.csdn.net/wangyangzhizhou/article/details/51397266">從JDK源碼角度看java并發線程的中斷</a>

<a href="http://blog.csdn.net/wangyangzhizhou/article/details/51371416">從JDK源碼角度看Java并發的公平性</a>

<a href="http://blog.csdn.net/wangyangzhizhou/article/details/51360228">從JDK源碼角度看java并發的原子性如何保證</a>

<a href="http://blog.csdn.net/wangyangzhizhou/article/details/74557125">從JDK源碼角度看Byte</a>

<a href="http://blog.csdn.net/wangyangzhizhou/article/details/73350488">從JDK源碼角度看Boolean</a>

歡迎關注:

從JDK源碼角度看Short