String StringBuilder StringBuffer
String 基于char数组[jdk8]的实现,一旦定义好,长度就不可改变
基于byte数组[jdk11]的实现
当进行字符串拼接的时候,每次都需要创建新的数组,来存放数据
StringBuilder与StringBuffer 长度可变字符串
StringBuilder的性能要高于StringBuffer
StringBuilder是线程不安全的
StringBuffer是线程安全的
由于StringBuffer需要进行线程的同步操作,其性能要比StringBuilder差
StringBuffer适用于多线程的并发操作。
包装类
每一种基本类型都对应有一个包装类
byte Byte
short Short
int Integer
long Long
float Float
double Double
char Character
boolean Boolean
Integer
整数对象的创建
Integer t = 100;
Integer t= new Integer(100);
Integer t2 = new Integer("1234");
Integer类中的方法大多都是static方法
String s = toString(int);
String s = toString(int,进制);
String s = toBinaryString(int);
String s = toOctalString(int);
String s = toHexString(int);
int t = Integer.parseInt(String);
int t = Integer.parseInt(String,进制);
-123的二进制:
先得到123的原码:00000000 00000000 00000000 01111011
取得反码: 11111111 11111111 11111111 10000100
+1 11111111 11111111 11111111 10000101
自动装箱和自动拆箱
自动装箱:基本类型的数据可以自动打包成对应的引用类型
自动拆箱:引用类型的数据可以自动出对应的基本类型
Random
Math
Date
Time
LocalTime
Calendar
=============================================================
浮点数的二进制表示方式:
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.52=1.0 1
0.02=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
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
123456
1.23456
下节数据结构:
数组[ArrayList Stack Vector]
链表[LinkedList LinkedBlockingQueue]
队列 [LinkedList,PriorityQueue]
散列[HashSet,HashMap,HashTable]
映射[HashMap TreeMap]
树[TreeSet TreeMap]