基本数据类型及包装类
基本数据类型
四类八种
1)四种整数类型(byte、short、int、long): byte:8 位,用于表示最小数据单位,如文件中数据,-128~127 short:16 位,很少用,-32768 ~ 32767 int:32 位、最常用,-2^31-1~2^31 (21 亿) long:64 位、次常用 注意事项: int i=5; // 5 叫直接量(或字面量),即 直接写出的常数。 整数字面量默认都为 int 类型,所以在定义的 long 型数据后面加 L或 l。 小于 32 位数的变量,都按 int 结果计算。 强转符比数学运算符优先级高。见常量与变量中的例子。
2)两种浮点数类型(float、double): float:32 位,后缀 F 或 f,1 位符号位,8 位指数,23 位有效尾数。 double:64 位,最常用,后缀 D 或 d,1 位符号位,11 位指数,52 位有效尾 注意事项: 二 进 制 浮 点 数 : 1010100010=101010001.0*2=10101000.10*2^10(2次方)=1010100.010*2^11(3次方)= . 1010100010*2^1010(10次方) 尾数: . 1010100010 指数:1010 基数:2 浮点数字面量默认都为 double 类型,所以在定义的 float 型数据后面加F 或 f;double 类型可不写后缀,但在小数计算中一定要写 D 或 X.X float 的精度没有 long 高,有效位数(尾数)短。 float 的范围大于 long 指数可以很大。 浮点数是不精确的,不能对浮点数进行精确比较。
3)一种字符类型(char): char:16 位,是整数类型,用单引号括起来的 1 个字符(可以是一个中文字符),使用 Unicode 码代表字符,0~2^16-1(65535) 。 注意事项: 不能为 0个字符。 转义字符:\n 换行 \r 回车 \t Tab 字符 \" 双引号 \\ 表示一个\ 两字符 char 中间用“+”连接,内部先把字符转成 int 类型,再进行加法运算,char 本质就是个数!二进制的,显示的时候,经过“处理”显示为字符。
4)一种布尔类型(boolean):true 真 和 false 假。
5)类型转换: 自动转换(小转大):byte-->short,char(byte不能自动转char)-->int-->long-->float-->double
强制转换(大转小):①会损失精度,产生误差,小数点以后的数字全部舍弃。②容易超过取值范围。
自动转换(低精度转高精度) char特殊,byte不能自动转char
6)记忆:8位1字节:Byte(字节型) 16位2字节:short(短整型)、char(字符型) 32位4字节:int(整型)、float(单精度型/浮点型) 64位8字节:long(长整型)、double(双精度型)
最后一个:boolean(布尔类型):
- 如果 boolean 是 “单独使用”:boolean 被编译为 int 类型,占 4 个字节
- 如果boolean 是以 “boolean 数组” 的形式使用:boolean 占 1 个字节,Java 虚拟机直接支持 boolean 数组,通过
newarray
指令创建 boolean 数组,然后通过 byte 数组指令baload
和bastore
来访问和修改 boolean 数组
包装类
包装类就是为了把基本数据类型包装成引用数据类型,并提供API进行更多的操作,让Object类可以进行统一管理
装箱与拆箱
基本数据类型转包装类 自动装箱
包装类转基本数据类型 自动拆箱
1 @Test 2 public void bTest() { 3 int a = 1; 4 // 自动装箱 基本数据类型自动转包装类 5 Integer b = a; 6 // 1 7 System.out.println(b); 8 // 自动拆箱 包装类自动转基本数据类型 9 int c = b; 10 // 1 11 System.out.println(c); 12 }
基本数据类型和包装类之间的转换
1 //基本数据类型转引用类型
2 int num = 10;
3 Integer in = new Integer(num);
4
5 //包装类s转基本数据类型
6 int nums = in.intValue();
7
8 //字符串转int
9 String ss = "1001";
10 int s1 = Integer.parseInt(ss);
11 or
12 Integer.valueOf(str).intValue()
13 转Integer Integer转int
14
15
16 //int转字符串
17 String str=Integer.toString(i)
18 or
19 String.valueOf(i)
20
21 //字符串转Integer
22 Integer s2 = new Integer(ss);
23
24 s2 = s2+1;// 1002 引用数据类+基本数据类 1.5支持 s2还是引用数据类型
包装类缓存池
Integer的缓存池其实就是IntegerCache.cache(数组),它在Integer进行类加载的时候初始化
区间[-128 ~127] 自动装箱时会从缓存里面拿
基本类型对应的包装类中,Byte、Short、Integer、Long和Character的缓存池都是[-128, 127],Boolean的缓存池比较特殊,只有true和false两个Boolean对象。
![](https://img2023.cnblogs.com/blog/1628202/202302/1628202-20230210005505304-908599884.png)
api示例
https://www.matools.com/api/java8
作者: deity-night
出处: https://www.cnblogs.com/deity-night/
关于作者:码农
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出, 原文链接 如有问题, 可邮件(***@163.com)咨询.