BigInteger和BigDecimal
- 大整数类和大浮点数类
|类型|存储需求|bit数|取值范围|备注|
|-|-|-|-|
|int|4字节|48|-2147483648~2147483647|
|short|2字节|28|-32768~32767|
|long|8字节|88|-9223372036854774808~9223372036854774807|
|byte|1字节|18|-128~127
|float|4字节|48|float类型的数值有一个后缀F(例如:3.14F)
|double|8字节|88|没有后缀F的浮点数值(如3.14)默认为double类型
|char|2字节|28|-|
|boolean|1字节|18|false、true|
原码、反码、补码
- 原码
- 用最高位表示符号位,‘1’表示负号,‘0’表示正号
- byte
- 0000 0000 表示0
- 1111 1111 表示-127
- 1000 0000 表示-128
- 反码
- 正数:正数的反码与原码相同。
- 负数:负数的反码,符号位为“1”,数值部分按位取反
- [+7]反= 0000 0111
- [-7]反= 1111 1000
- 补码
- 正数:正数的补码和原码相同。
- 负数:负数的补码则是符号位为“1”。数值部分按位取反后再在末位(最低位)加1
- [+7]补= 0000 0111
- [-7]补= 1111 1001
- 补码的补码就是原码
Byte
- 1B(byte,字节)= 8 bit
java中为什么十六进制
- 位操作更直观
- 0x02 << 4
- 更节省内存,更好地控制数据长度
- 二进位制和八进位制、二进位制和十六进位制之间的换算简便。
编码
- ASCII码
- 128个字符的编码
- Unicode
- 编码方式
- 容易出现空间浪费
- UTF-16
- Java系统默认
- 全世界每个不同语言的不同字符都统一编码,全球通行
- UTF-8
- UTF-8是互联网上使用最广的一种Unicode实现方式,
- UTF-8编码是变长编码,通常汉字占三个字节,扩展B区以后的汉字占四个字节
- 文件存储使用UTF-8;内存中使用utf-16;UTF-8 更适合网络传输,对 ASCII 字符采用单字节存储,另外单个字符损坏也不会影响后面其它字符
- 用几位冗余信息告诉系统,当前字符有没有结束,是不是还需要继续往下读下一个字节
- 解决原英文字符占用两个字节问题
- UTF-8对ASCII极佳的兼容性
- 节约内存的向后兼容ASCII;
- 单字节上错误兼容更好
- GBK
- 编码,一个汉字占两个字节
byte与字符串转换
- 字符串按照字符分割,每个字符以指定的编码格式转成对应格式的长度数组,utf-8可能是3个字节长度的数组。
字节流与字符流
- 一个字符=两个字节
- 在程序中所有的数据都是以流的方式进行传输或保存的,程序需要数据的时候要使用输入流读取数据,而当程序需要将一些数据保存起来的时候,就要使用输出流完成。
- 程序中的输入输出都是以流的形式保存的,流中保存的实际上全都是字节文件。
- 字符流处理的单元为2个字节的Unicode字符,分别操作字符、字符数组或字符串,而字节流处理单元为1个字节,操作字节和字节数组。所以字符流是由Java虚拟机将字节转化为2个字节的Unicode字符为单位的字符而成的,所以它对多国语言支持性比较好!如果是音频文件、图片、歌曲,就用字节流好点,如果是关系到中文(文本)的,用字符流好点
- 字节流可用于任何类型的对象,包括二进制对象,而字符流只能处理字符或者字符串
- 字节流提供了处理任何类型的IO操作的功能,但它不能直接处理Unicode字符,而字符流就可以