日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

JDK源码解析之 Java.lang.Byte

發布時間:2025/3/8 java 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JDK源码解析之 Java.lang.Byte 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

byte,即字節,由8位的二進制組成。在Java中,byte類型的數據是8位帶符號的二進制數,以二進制補碼表示的整數
取值范圍:默認值為0,最小值為-128(-27);最大值是127(27-1)
Byte類是byte的包裝類,被final修飾,不能被繼承,繼承了Number類,可以用于數字類型的一系列轉換,還實現了Comparable接口,可以用于比較

一、類定義

public final class Byte extends Number implements Comparable<Byte> {}
  • 類被聲明為final的,表示不能被繼承;
  • 繼承了Number抽象類,可以用于數字類型的一系列轉換;
  • 實現了Comparable接口,強行對實現它的每個類的對象進行整體排序

二、成員變量

// byte的最小值,也就是-2的7次方public static final byte MIN_VALUE = -128;//byte的最大值,也即2的7次方減1public static final byte MAX_VALUE = 127;/*** @SuppressWarnings("unchecked")表示對警告保持靜默 * 獲取Byte的原始class對象*/@SuppressWarnings("unchecked")public static final Class<Byte> TYPE = (Class<Byte>) Class.getPrimitiveClass("byte");//Byte對象中具體的byte值,定義為finalprivate final byte value; // 用于表示二進制補碼二進制形式的字節值的位數(定義了Byte的大小,為8個位,即一個字節) public static final int SIZE = 8;//用于表示二進制補碼二進制形式的字節值的字節數(給出了字節,即SIZE/Byte.SIZE = 1;占一個字節)public static final int BYTES = SIZE / Byte.SIZE;// 序列化private static final long serialVersionUID = -7183698231559129828L;

三、構造器

public Byte(byte value) {this.value = value;}//參數為字符串形式傳入的value必須是byte類型的值,字符串s必須是可以轉換為數字的字符串,不然會報錯public Byte(String s) throws NumberFormatException {this.value = parseByte(s, 10);}

四、內部類

含有靜態模塊,class加載的時候,執行靜態模塊,初始化cache[]。

// Byte對象的緩存類private static class ByteCache {private ByteCache(){}// 緩存數組static final Byte cache[] = new Byte[-(-128) + 127 + 1];// 緩存初始化,范圍是-128到127static {for(int i = 0; i < cache.length; i++)cache[i] = new Byte((byte)(i - 128));}}

定義了一個Byte的緩存值,將-128~127寫入到一個cache數組,當在這個區間的時候,JVM會直接使用緩存值,但是當超過這個區間的話,會發生溢出的現象,128會變為-128,會從最小值繼續循環計算

五、普通方法

1、equals (Object obj)
public boolean equals(Object obj) {if (obj instanceof Byte) {return value == ((Byte)obj).byteValue();}return false;}
2、hashCode

重寫Object中的hashCode,byte的hashCode就是它的值

@Overridepublic int hashCode() {return Byte.hashCode(value);}public static int hashCode(byte value) {return (int)value;}
3、toString(byte b)

底層調用Integer.toString,將byte強轉為int值在傳入一個默認的基數10。

public static String toString(byte b) {return Integer.toString((int)b, 10);}
4、toString( )

先把byte升級為int,然后用Integer的toString靜態方法

public String toString() {return Integer.toString((int)value);}
5、 valueOf()

觀察這幾個方法,public static Byte valueOf(byte b)和public static byte parseByte(String s, int radix)是核心。第2個方法轉換為byte;第一個方法轉換為Byte,Byte根據byte的值,從緩存中獲取Byte對象。

//指定byte值,返回Byte表示的實例 。public static Byte valueOf(byte b) {final int offset = 128;return ByteCache.cache[(int)b + offset];}//,該對象保存String使用第二個參數給出的基數(計算機進制)解析時從指定的值中提取的值。public static Byte valueOf(String s, int radix)throws NumberFormatException {return valueOf(parseByte(s, radix));}//使用s構造一個新的Byte對象,s為byte范圍內的整數。public static Byte valueOf(String s) throws NumberFormatException {return valueOf(s, 10);}
6、decode()

將2進制或者是8進制或者是16進制的字符串轉成封裝成Byte對象

public static Byte decode(String nm) throws NumberFormatException {// 調用Integer.decode()進行處理int i = Integer.decode(nm);if (i < MIN_VALUE || i > MAX_VALUE)throw new NumberFormatException("Value " + i + " out of range from input " + nm);// 將處理結果的值進行強轉調用valueOf(byte b);return valueOf((byte)i);}
7、 compareTo與compare

compareTo 比較當前對象與指定Byte,實際調用的是compare(byte x, byte y) 比較兩個byte

public int compareTo(Byte anotherByte) {return compare(this.value, anotherByte.value);}public static int compare(byte x, byte y) {return x - y;}
8、轉換方法
/*** 將指定byte轉換為無符號int*/public static int toUnsignedInt(byte x) {return ((int) x) & 0xff;}/*** 將指定byte專為無符號long*/public static long toUnsignedLong(byte x) {return ((long) x) & 0xffL;}

六、總結

Byte是java.lang中的一個類,目的是為基本數據類型byte進行封裝。

Byte是byte的包裝類,就如同Integer和int的關系,

一般情況包裝類用于泛型或提供靜態方法,用于基本類型或字符串之間轉換,建議盡量不要用包裝類和基本類型之間運算,因為這樣運算效率會很差的

6.1、類封裝的好處
  • Byte可以將對象的引用傳遞,使得多個function共同操作一個byte類型的數據,而byte基本數據類型是賦值之后要在stack(棧區域)進行存儲的;
  • 在java中包裝類,比較多的用途是用在于各種數據類型的轉化中。
    比如,現在byte要轉為String
byte a=0;String result=Integer.toString(a);
  • 使用泛型時
List<Integer> nums;

? 這里<>需要的類。如果你用int。它會報錯的

總結

以上是生活随笔為你收集整理的JDK源码解析之 Java.lang.Byte的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。