Java源码——Integer
最近在研究java的源代码,但是由于自己英语水平有限,所以想使用中文注释的方式把源码里的方法全部重写
一遍,下面是楼主整理出来的一小部分。我把整体的项目托管到GitHub上了,欢迎大家前去交流学习。
GitHub : https://github.com/15128928804/yuanMa
- /**
* @Author:zhuangfei
* @Description:返回由第二个参数指定基数转换为字符串格式的第一个参数
* 如果基数超过了Character的最小(-2)或最大(36)区间,会指定为10
* 如第一个参数为负,则会把它相应转换后的ASCII参数前加上 ‘-’
* i :需要转换的参数
* radix :指定的基数
* @Date:11:13 2017/11/29
*/
public static String toString(int i, int radix) {
if(radix < Character.MIN_RADIX || radix > Character.MAX_RADIX) {
radix = 10;
}- if(radix == 10)
return toString(i);- char buf[] = new char[33];
boolean negative = (i < 0);
int charPos = 32;- if(!negative)
i = -i;- while (i <= -radix) {
buf[charPos--] = digits[-(i % radix)];
i = i / radix;
}
buf[charPos] = digits[-i];
if(negative) {
buf[--charPos] = '-';
}- return new String(buf, charPos, (33 - charPos));
}- /**
* @Author:zhuangfei
* @Description:返回指定参数的String格式,指定的整数参数转换为有符号的小数返回
* i :指定参数
* @Date:11:28 2017/11/29
*/
public static String toString(int i) {
if(i == Integer.MIN_VALUE) {
return "-2147483648";
}
int size = (i < 0)? stringSize(-i) + 1: stringSize(i);
char[] buf = new char[size];
getChars(i, size, buf);
return new String(buf, true);
}- /**
* @Author:zhuangfei
* @Description:将整数放入数组中,字符被放置到缓冲区里,然后从指定索引处最不重要
* 的数开始向后遍历
* i :整数
* index :指定的索引
* buf :字符数组
* @Date:11:33 2017/11/29
*/
static void getChars(int i, int index, char[] buf) {
int q, r;
int charPos = index;
char sign = 0;- if (i < 0) {
sign = '-';
i = -i;
}- while (i >= 65536) {
q = i / 100;
r = i - ((q << 6) + (q << 5) + (q << 2));
i = q;
buf[--charPos] = DigitOnes[r];
buf[--charPos] = DigitTens[r];
}- for(;;) {
q = (i * 52429) >>> (16 + 3);
r = i - ((q << 3) + (q << 1));
buf[--charPos] = digits[r];
i = q;
if (i == 0) break;
}
if(sign != 0) {
buf[--charPos] = sign;
}
}
/**
* @Author:zhuangfei
* @Description:需要正数的参数
* x :正参
* @Date:11:42 2017/11/29
*/
static int stringSize(int x) {
for(int i = 0; ; i++) {
if(x <= sizeTable[i]) {
return i + 1;
}
}
}
Java源码——Integer的更多相关文章
- Java源码 Integer.bitCount实现过程
public static int bitCount(int i) { // HD, Figure 5-2 i = i - ((i >>> 1) & 0x55555555); ...
- Java源码解读(一)——HashMap
HashMap作为常用的一种数据结构,阅读源码去了解其底层的实现是十分有必要的.在这里也分享自己阅读源码遇到的困难以及自己的思考. HashMap的源码介绍已经有许许多多的博客,这里只记录了一些我看源 ...
- 24点扑克牌游戏——(含java源码)(GUI实现)
给出四个数字,要求,在其间添加运算符和括号,使得计算结果等于24. 括号的放置即为决定哪几个数先进行计算.所以,我们先确定首先进行计算的两个相邻的数,计算完成后,就相当于剩下三个数字,仍需要在它们之间 ...
- 从Java源码到Java字节码
Java最主流的源码编译器,javac,基本上不对代码做优化,只会做少量由Java语言规范要求或推荐的优化:也不做任何混淆,包括名字混淆或控制流混淆这些都不做.这使得javac生成的代码能很好的维持与 ...
- Java源码系列1——ArrayList
本文简单介绍了 ArrayList,并对扩容,添加,删除操作的源代码做分析.能力有限,欢迎指正. ArrayList是什么? ArrayList 就是数组列表,主要用来装载数据.底层实现是数组 Obj ...
- Java源码系列2——HashMap
HashMap 的源码很多也很复杂,本文只是摘取简单常用的部分代码进行分析.能力有限,欢迎指正. HASH 值的计算 前置知识--位运算 按位异或操作符^:1^1=0, 0^0=0, 1^0=0, 值 ...
- Java 源码刨析 - HashMap 底层实现原理是什么?JDK8 做了哪些优化?
[基本结构] 在 JDK 1.7 中 HashMap 是以数组加链表的形式组成的: JDK 1.8 之后新增了红黑树的组成结构,当链表大于 8 并且容量大于 64 时,链表结构会转换成红黑树结构,它的 ...
- java源码——文件读写和单词统计
本文要解决的问题:"键盘输入一段英语语句,将这段话写入content.txt中,然后输出这段话,并且统计语句中英文单词的数目以及各个单词出现的次数." 分析问题知,核心是文件读写和 ...
- java源码——0~9十个数字不重复地使用使加法表达式成立
这个问题是在我写个的几个博客里较为复杂的一个.首先,先看看整个问题的表述. 星号表示0~9的一个数字,而且不允许重复,使得下面的加法表达式成立.输出所有结果. ※ ※ ※ ※ ※ + 2 ...
随机推荐
- myeclipse通过数据表生成jpa或hibernate实体---https://blog.csdn.net/partner4java/article/details/8560289
myeclipse通过数据表生成jpa或hibernate实体-----https://blog.csdn.net/partner4java/article/details/8560289
- Codeforces Round #372 (Div. 2) A .Crazy Computer/B. Complete the Word
Codeforces Round #372 (Div. 2) 不知不觉自己怎么变的这么水了,几百年前做A.B的水平,现在依旧停留在A.B水平.甚至B题还不会做.难道是带着一种功利性的态度患得患失?总共 ...
- Delphi简单的数据操作类
unit MyClass; uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, VCL ...
- ESG操作指南
ESG使用指南:1.ESG操作文档网站:ESG有个网站,是专门的操作文档网站,因为ESG三个环境,流程各不一样.地址:http://10.20.12.90:20567/esg-help-doc/2.E ...
- pycharm内存不足时如何修改设置?
Help->Find Action->(type "VM Options")->(Click)"Edit Custom VM Options" ...
- Apache2 Web 服务器
Apache2 Web 服务器的安装 sudo apt install apache2 -y 当安装Apache2包之后,Apache2相关的服务是启用的,并在重启后自动运行.在某些情况下如果你的Ap ...
- Spark修炼之道(基础篇)——Linux大数据开发基础:第二节:Linux文件系统、文件夹(一)
本节主要内容 怎样获取帮助文档 Linux文件系统简单介绍 文件夹操作 訪问权限 1. 怎样获取帮助文档 在实际工作过程其中,常常会忘记命令的使用方式.比如ls命令后面能够跟哪些參数,此时能够使用ma ...
- HDOJ 5381 The sum of gcd 莫队算法
大神题解: http://blog.csdn.net/u014800748/article/details/47680899 The sum of gcd Time Limit: 2000/1000 ...
- Go语言核心之美 3.2-slice切片
Slice(切片)是长度可变的元素序列(与之相应,上一节中的数组是不可变的),每一个元素都有同样的类型.slice类型写作[]T.T是元素类型.slice和数组写法非常像,差别在于slice没有指定长 ...
- 华为云分布式数据库中间件DDM和开源MyCAT对比
前言 华为云分布式数据库中间件(Distributed Database Middleware)是解决数据库容量.性能瓶颈和分布式扩展问题的中间件服务,提供分库分表.读写分离.弹性扩容等能力,应对海量 ...