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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Integer源码解析

發布時間:2023/12/9 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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>。
JNIEXPORT jclass JNICALL Java_java_lang_Class_getPrimitiveClass(JNIEnv *env,jclass cls,jstring name) {const char *utfName;jclass result;if (name == NULL) {JNU_ThrowNullPointerException(env, 0);return NULL;}utfName = (*env)->GetStringUTFChars(env, name, 0); if (utfName == 0) return NULL; result = JVM_FindPrimitiveClass(env, utfName); (*env)->ReleaseStringUTFChars(env, name, utfName); return result; }
  • 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源码解析的全部內容,希望文章能夠幫你解決所遇到的問題。

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