Integer源码解析
生活随笔
收集整理的這篇文章主要介紹了
Integer源码解析
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
?
版權聲明:本文為博主原創文章,未經博主允許不得轉載。 https://blog.csdn.net/wangyangzhizhou/article/details/77196626
概況
Java的Integer類主要的作用就是對基本類型int進行封裝,提供了一些處理int類型的方法,比如int到String類型的轉換方法或String類型到int類型的轉換方法,當然也包含與其他類型之間的轉換方法。除此之外還有一些位相關的操作。
繼承結構
--java.lang.Object--java.lang.Number--java.lang.Integer- 1
- 2
- 3
主要屬性
第一部分
public static final int MIN_VALUE = 0x80000000; public static final int MAX_VALUE = 0x7fffffff; public static final int SIZE = 32; public static final int BYTES = SIZE / Byte.SIZE; public static final Class<Integer> TYPE = (Class<Integer>) Class.getPrimitiveClass("int");- 1
- 2
- 3
- 4
- 5
- MIN_VALUE靜態變量表示int能取的最小值,為-2的31次方,被final修飾說明不可變。
- 類似的還有MAX_VALUE,表示int最大值為2的31次方減1。
- SIZE用來表示二進制補碼形式的int值的比特數,值為32,靜態變量且不可變。
- BYTES用來表示二進制補碼形式的int值的字節數,值為SIZE除于Byte.SIZE,結果為4。
- TYPE的toString的值是int。?
Class的getPrimitiveClass是一個native方法,在Class.c中有個Java_java_lang_Class_getPrimitiveClass方法與之對應,所以JVM層面會通過JVM_FindPrimitiveClass函數根據”int”字符串獲得jclass,最終到Java層則為Class<Integer>。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
當TYPE執行toString時,邏輯如下,則其實是getName函數決定其值,getName通過native方法getName0從JVM層獲取名稱,
public String toString() {return (isInterface() ? "interface " : (isPrimitive() ? "" : "class ")) + getName(); }- 1
- 2
- 3
- 4
getName0根據一個數組獲得對應的名稱,JVM根據Java層的Class可得到對應類型的數組下標,比如這里下標為10,則名稱為”int”。
const char* type2name_tab[T_CONFLICT+1] = {NULL, NULL, NULL, NULL, "boolean", "char", "float", "double", "byte", "short", "int", "long", "object", "array", "void", "*address*", "*narrowoop*", "*conflict*" };- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
第二部分
final static char [] DigitTens = {'0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '2', '2', '2', '2', '2', '2', '2', '2', '2', '2', '3', '3', '3', '3', '3', '3', '3', '3', '3', '3', '4', '4', '4', '4', '4', '4', '4', '4', '4', '4', '5', '5', '5', '5', '5', '5', '5', '5', '5', '5', '6', '6', '6', '6', '6', '6', '6', '6', '6', '6', '7', '7', '7', '7', '7', '7', '7', '7', '7', '7', '8', '8', '8', '8', '8', '8', '8', '8', '8', '8', '9', '9', '9', '9', '9', '9', '9', '9', '9', '9', } ; final static char [] DigitOnes = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', } ; final static char[] digits = { '0' , '1' , '2' , '3' , '4' , '5' , '6' , '7' , '8' , '9' , 'a' , 'b' , 'c' , 'd' , 'e' , 'f' , 'g' , 'h' , 'i' , 'j' , 'k' , 'l' , 'm' , 'n' , 'o' , 'p' , 'q' , 'r' , 's' , 't' , 'u' , 'v' , 'w' , 'x' , 'y' , 'z' }; final static int [] sizeTable = {轉載于:https://www.cnblogs.com/ziq711/p/8744864.html
總結
以上是生活随笔為你收集整理的Integer源码解析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: gb28181协议java_gb2818
- 下一篇: 汇编语言复习摘要二——寄存器