Java的Byte類主要的作用就是對基本類型byte進行封裝,提供了一些處理byte類型的方法,比如byte到String類型的轉換方法或String類型到byte類型的轉換方法,當然也包含與其他類型之間的轉換方法。
主要實作代碼如下:
<code>MIN_VALUE</code>靜态變量表示byte能取的最小值,值為-128,被final修飾說明不可變;
類似的還有<code>MAX_VALUE</code>,表示byte的最大值為127。
<code>SIZE</code>用來表示于二進制補碼形式的byte值的比特數,值為8,靜态變量且不可變。
<code>BYTES</code>用來表示于二進制補碼形式的byte值的位元組數,值為1,靜态變量且不可變。
由于是對byte的封裝,是以必定要有一個變量來儲存byte的值,即<code>value</code>,同樣它也被final修飾說明不可變。
<code>TYPE</code>的toString的值是<code>byte</code>。
Class的<code>getPrimitiveClass</code>是一個native方法,在<code>Class.c</code>中有個<code>Java_java_lang_Class_getPrimitiveClass</code>方法與之對應,是以JVM層面會通過<code>JVM_FindPrimitiveClass</code>函數會根據”byte”字元串獲得jclass,最終到Java層則為<code>Class<Byte></code>。
當<code>TYPE</code>執行toString時,邏輯如下,則其實是<code>getName</code>函數決定其值,<code>getName</code>通過native方法<code>getName0</code>從JVM層擷取名稱,
<code>getName0</code>根據一個數組獲得對應的名稱,JVM根據Java層的Class可得到對應類型的數組下标,比如這裡下标為8,則名稱為”byte”。
兩個parseByte方法,主要看第一個即可,第一個參數是待轉換的字元串,第二個參數表示進制數,這裡的轉換其實是調了Integer的parseInt方法,傳回值再判斷是不是在byte的最小值和最大值之間。怎麼更好了解這個參數呢?舉個例子,<code>Byte.parseByte("100",10)</code>表示十進制的100,是以值為100,而<code>Byte.parseByte("100",2)</code>表示二進制的100,是以值為4。另外如果<code>Byte.parseByte("1000",10)</code>會抛出<code>java.lang.NumberFormatException</code>異常。
包含兩種構造函數,分别可以傳入byte和String類型。它是通過調用parseByte方法進行轉換的,是以轉換邏輯與上面的parseByte方法一樣。
一個是靜态方法一個是非靜态方法,但兩個方法轉換的效果是一樣的,都是以十進制形式轉換。
ByteCache是Byte的一個内部類,它其實就是一個包含了byte所有可能值的Byte數組,對于byte來說其實它的可能值就是從-128到127,一共256個,是以我們隻需要執行個體化256個Byte對象就可以表示所有可能的byte。而且這些都是靜态且final的,避免重複的執行個體化和回收。
有三個valueOf方法,主要看下面這個,因為ByteCache包含了所有byte可能值的Byte對象,直接從ByteCache的數組中擷取對應的Byte對象即可。
decode方法主要作用是解碼字元串轉成Byte型,比如<code>Byte.decode("11")</code>的結果為11,而<code>Byte.decode("0x11")</code>結果為17,因為後面的是十六進制,它會根據實際情況進行解碼。
包括shortValue、intValue、longValue、floatValue和doubleValue等方法,其實就是轉換成對應的類型。
hashCode方法很簡單,就是直接傳回int類型的值。
比較是否相同時先判斷是不是Byte類型再比較值。
通過相減來比較,大于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/73350488">從JDK源碼角度看Boolean</a>
歡迎關注:
