第二次总结
- String StringBuilder StringBuffer
- 包装类
- 负数十进制转二进制
- 浮点数的二进制表示方式:
- String StringBuilder StringBuffer
String 基于char数组[jdk8]的实现,一旦定义好,长度就不可改变
基于byte数组[jdk11]的实现
StringBuilder与StringBuffer 长度可变字符串
StringBuilder的性能要高于StringBuffer
StringBuilder是线程不安全的
StringBufer是线程安全的
由于StringBuffer需要进行线程的同步操作,其性能要比StringBuilder差
StringBuffer适用于多线程的并发操作。
一、包装类
1.每一种基本类型都对应有一个包装类
- byte Byte
- short Short
- int Integer
- long Long
- float Float
- double Double
- char Character
- boolean Boolean
2. 整数对象的创建
Integer t=100; Integer t1=new Integer(100); Integer t2=new Integer("1234");
Integer类中的方法大多都是static方法
String s = toString(int);
String s = toString(int,进制); //将十进制的数字转换成其它进制的数字,用字符串表示
String s=Integer.toString(123,2);
System.out.println(s);
输出结果:

String s = toBinaryString(int); //转成二进制
String s=Integer.toBinaryString(123);
System.out.println(s);
输出结果:

String s = toOctalString(int); //转成八进制
String s=Integer.toOctalString(123);
System.out.println(s);
输出结果:

String s = toHexString(int); //转成十进制
String s = Integer.toHexString(123);
System.out.println(s);
输出结果:

int t = Integer.parseInt(String); //将字符串转成数字
int s = Integer.parseInt("123"); System.out.println(s);
int t = Integer.parseInt(String,进制); //其它进制转成十进制
int num2 = Integer.parseInt("7b", 16); System.out.println(num2);
//String要符合转换进制的格式


-123的二进制:
先得到123的原码:00000000 00000000 00000000 01111011
取得反码: 11111111 11111111 11111111 10000100
+1 11111111 11111111 11111111 10000101
浮点数的二进制表示方式:
float f1 = 20.5F; double d1 = 20.5; System.out.println(f1==d1); float f2 = 20.3F; double d2 = 20.3; System.out.println(f2==d2);
输出结果:

20.5 = 205*10的-1次方 = 205E-1
1.将整数部分转换成二进制
除以2,取余数
20/2=10...0
10/2=5...0
5/2=2...1
2/2=1...0
1/2=0...1
20的二进制:10100
2.将小数部分转成二进制
乘以2,取整数部分
0.5*2=1.0 1
0.0*2=0 0
0.5的二进制:10
3.将整数部分和小数部分整合到一起
20.5的二进制:10100.10
4.将20.5的二进制用科学计数法表示,只保留一个整数位
10100.10 = 1.010010E4
5.将4次方也用二进制表示
4的二进制:100
20.5的二进制采用科学计数法:1.010010E100
6.准备存储
float的存储
float是32位的,第1位是符号位,表示正负
接下来8位是指数位
最后23位表示尾数位
a.存符号位,20.5是一个正数,符号位是0
b.存指数位 float在存储指数位的时候需要先加127,在存储
100+1111111 = 10000011
c.存尾数位 由于尾数部分的整数永远是1,所以1是不存储的,只存储小数部分
010010
如果小数部分不够23位,就在后面补0
符号位[1] 指数位[8] 尾数位[23]
0 10000011 01001000000000000000000
float 20.5的二进制: 01000001101001000000000000000000
double的存储
double是64位的 第1位是符号位,表示正负
接下来11位是指数位
最后52位表示尾数位
a.存符号位,20.5是一个正数,符号位是0
b.存指数位,double的指数位需要先+1023,在保存
100+1111111111 = 10000000011
c.存尾数位 由于尾数部分的整数永远是1,所以1是不存储的,只存储小数部分
010010
如果不够52位,就在后面补0
符号位[1] 指数位[11] 尾数位[52]
0 10000000011 0100100000000000000000000000000000000000000000000000
double的20.5的二进制:0100000000110100100000000000000000000000000000000000000000000000
取出float
符号位 0
取指数位,先减去127,得到真实指数
10000011-1111111=100
取得尾数部分 01001000000000000000000,在整数部分加1
1.01001000000000000000000
拼接成一个科学计数法表示的数字
1.01001000000000000000000E100
去除科学计数法
10100.1000000000000000000
将小数点前面的部分取出,还原成整数 10100 --> 20
将小数点后面的部分还原成整数
0.10000000 ->0.5000000
拼接到一起20.5
当小数位为3或其他无限循环的小数时
0.3*2=0.6 0
0.6*2=1.2 1
0.2*2=0.4 0
0.4*2=0.8 0
0.8*2=1.6 1
0.6*2=1.2 1
0.2*2=0.4 0
10100.010011001100110011001100110011001...
1.0100010011001100110011001100110011001...E100
float 0 10000011 01000100110011001100110
double 0 10000000011 01000100110011001100110

浙公网安备 33010602011771号