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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/280677.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL InnoDB存储引擎

呵呵哒。。。 MySQL体系结构和存储引擎 首先要搞懂的是什么是数据库&#xff0c;什么是数据库实例。 数据库&#xff1a;物理操作系统文件或其他形式文件类型的集合。 实例&#xff1a;MySQL数据库由后台线程以及一个共享内存区组成&#xff0c;实例才是真正对数据库进行操作的…

Blazor学习之旅 (8) MudBlazor组件库介绍

【Blazor】| 总结/Edison Zhou大家好&#xff0c;我是Edison。为了实现一个Web应用系统&#xff0c;需要有个看起来不丑的UI&#xff0c;而对于.NET程序员来说要做全栈开发还是有点难&#xff0c;而本篇介绍的这个UI组件库正好可以帮助我们解决这个问题&#xff01;MudBlaozr是…

棉花糖多少钱_如何在6.0棉花糖及更高版本中访问Android的正在运行的应用程序列表...

棉花糖多少钱In Android 5.x and below, accessing your list of running apps was simple—you’d jump into Settings > Apps > Running. Easy! In Android 6.0, however, Google moved this setting. It’s still not super difficult to find, but it’s a little tr…

IE不能直接顯示PDF的原因分析和解決方法

>>>>>問題<<<<<因為有系統用iframe顯示PDF&#xff0c;但PDF有時卻并不能順利地在流覽器中顯示&#xff0c;而是跳出下載對話框&#xff0c;要求下載&#xff0c;給user帶來很多困擾&#xff0c;也給我們系統維護人員帶來了麻煩&#xff0c;用了…

C# 程序图标设置/winform 图标

一、目的、实际情况 1.编写一个winform 程序&#xff0c;发现有一个图标非常有意义。区分其他程序&#xff0c;以及感觉在做产品而不是写代码。 2.添加图标图片发现&#xff0c;需要用ico格式。在线转换&#xff08;某度搜索&#xff09;还是不靠谱。要微信登陆&#xff0c;登…

数字化转型,究竟在“转”什么?

这是头哥侃码的第265篇原创「头哥唠B唠」这个栏目已经持续了几个月了&#xff0c;没想到还在继续进行&#xff0c;并收获了很多朋友们的喜爱。非常感谢大家的支持&#xff01;在上次的直播中&#xff0c;我找来了我的老熟人们。一个是右军老师&#xff0c;之前 APISIX 的很多内…

C++ Primer 第Ⅲ部分笔记——类设计者的工具

1.对象移动 1.1右值引用 右值引用区别于普通引用&#xff0c;用两个&表示 返回左值引用的函数&#xff0c;连同赋值、下标、解引用和前置递增递减运算符返回左值 返回非引用的函数&#xff0c;连同算术、关系、位以及后置递增递减运算符都生成右值 我们不能将左值引用绑定到…

Crash 的文明世界

题目描述 给一棵树&#xff0c;求以每个点为根时下列式子的值。 题解 当k1时这就是一个经典的换根dp问题。 所以这道题还是要用换根dp解决。 部分分做法&#xff1a; 考虑转移时是这样的一个形式(图是抄的)。 用二项式定理展开就可以nk2做了。 观察到结果是一个xk的形式。 然后…

wampServer配置WWW根目录遇到的坑

直接在官网下载之后开始安装&#xff0c;一切正常 打开使用&#xff0c;一切正常 设置WWW目录。坑了一波 按照的都是百度上的教程&#xff0c;设置httpd.conf 这里配置之后网页访问127.0.0.1 还是localhost都还是原始的www目录 后来 我发现了这里 是配置虚拟URL的地方。以上是正…

windows安装程序创建_如何在Windows上创建已安装程序的列表

windows安装程序创建Reinstalling Windows is a good way to fix serious problems with your computer, or just to get a fresh slate. But before you reinstall Windows, you should make a list of programs you currently have installed on your PC so you know what yo…

实现一个更新所有 dotnet tool 的 dotnet tool

实现一个更新所有 dotnet tool 的 dotnet toolIntrodotnet tool 是从 .NET Core 2.1 开始支持的命令行工具&#xff0c;在使用 dotnet tool 比较多了的时候&#xff0c;想要更新所有的 dotnet tool 就比较麻烦&#xff0c;而目前 .NET SDK 还不支持&#xff0c;也有一些人希望能…

C# 普通权限运行程序\非管理员运行\降低权限运行

一、目的与实际 1.VS设置管理员权限运行程序后&#xff0c;发现调用powershell命令或程序需要普通权限即可&#xff0c;Administrator权限反而错。 2.网上搜索关键字&#xff0c;大部分都是怎么使用管理员权限运行。 3.bing搜索意外发现有相关资料&#xff0c;记录分享。 二…

am335x PDK3.0 设置为单网口配置记录

原来的配置是双网口的&#xff0c;现在要配置为单网口。一直以为这个配置是在 make menuconfig 里面&#xff0c; 没想到是在设备树里面。修改设备树// vim arch/arm/boot/dts/am335x-sbc7109.dts722 &mac {723 pinctrl-names "default", "sleep"…

[AHOI2009]飞行棋 BZOJ1800

题目描述 给出圆周上的若干个点&#xff0c;已知点与点之间的弧长&#xff0c;其值均为正整数&#xff0c;并依圆周顺序排列。 请找出这些点中有没有可以围成矩形的&#xff0c;并希望在最短时间内找出所有不重复矩形。 输入输出格式 输入格式&#xff1a;第一行为正整数N&…

webapi+Quartz.NET解决若干定时程序同时运行的问题

项目现状&#xff1a; 有若干定时程序需要自启动运行&#xff0c;为了简便程序部署等问题&#xff0c;采取这种办法把定时程序集中管理到webapi中跟随api发布 代码架构介绍&#xff1a; 新建一个类库&#xff0c;类库引用Quartz&#xff08;Quartz.2.3.2&#xff09;&#xff0…

mac恢复iphone_免费下载:旧Mac和iPhone壁纸的令人震惊的完整档案

mac恢复iphoneLove or hate Apple, you’ve got to admit: their background images are consistently stunning. Now you can download all of them. 爱或恨苹果&#xff0c;您必须承认&#xff1a;它们的背景图像始终令人赞叹。 现在&#xff0c;您可以下载所有这些文件。 A …

Django01-1: request 方法

#POST request.method #返回全大写字符穿&#xff0c;<class str> POST/GETrequest.POST #用户提交数据&#xff0c;不包含文件 #<QueryDict>request.POST.get(hobby) #拿列表最后一个 request.POST.getList(hobby) #拿多个&#xff0c;列表全部#GET 获取url &a…

Magicodes.IE 2.7.1发布

2.7.12022.12.01Magicodes.IE.EPPlus默认添加SkiaSharp.NativeAssets.Linux.NoDependencies包&#xff0c;以便于在Linux环境下使用导入验证支持将错误数据通过Stream的方式返回&#xff0c;感谢sampsonye &#xff08;见pr#466&#xff09;2.7.02022.11.07添加SkiaSharp移除Si…

Oracle监听的静态注册和动态注册

静态注册&#xff1a;通过解析listene.ora文件 动态注册&#xff1a;由PMON进程动态注册至监听中 在没有listener.ora配置文件的情况下&#xff0c;如果启动监听&#xff0c;则监听为动态注册。用图形化netca创建的监听&#xff0c;默认也为动态注册 1.静态注册 listener.ora文…

AKOJ-1695-找素数

题意&#xff1a; 给定区间L&#xff0c;R。 计算区间中素数个数。 2 < L,R < 2147483647, R-L < 1000000。 思路&#xff1a; 素数区间筛 先筛(2-sqrt(r))。 再用(2-sqrt(r))中的素数筛(l-r)。 代码: 1.自己写的区间筛&#xff0c;将筛2-sqrt&#xff08;r) 分开了。…