- 2.24
八种基本数据类型,3种引用类型

注意一下几点:
- Java八种基本数据类型的字节数:1字节(byte、boolean)、 2字节(short、char)、4字节(int、float)、8字节(long、double)
- 浮点数的默认类型为double(如果需要声明一个常量为float型,则必须要在末尾加上f或F)
- 整数的默认类型为int(声明Long型在末尾加上l或者L)
- 八种基本数据类型的包装类:除了char的是Character、int类型的是Integer,其他都是首字母大写
- char类型是无符号的,不能为负,所以是0开始的
1.int和long是多少位,多少字节
| 类型 | 位数(bit) | 字节数(byte) | 取值范围 | 默认值 |
|---|---|---|---|---|
int | 32 位 | 4 字节 | -2³¹ ~ 2³¹-1(约 -21亿 ~ +21亿) | 0 |
long | 64 位 | 8 字节 | -2⁶³ ~ 2⁶³-1(约 -9×10¹⁸ ~ +9×10¹⁸) | 0L |
2.long和int可以互转吗
long像int转: 强制类型转换,可能会有数据丢失或溢出
3.数据类型转换方式你知道哪些
- 隐式转换(自动类型转换):当超出范围时,java会自动转换
- 强制类型转换:目标类型 变量名 = (目标类型) 源类型
- 字符串转换 :
Integer.parseInt(),Double.parseDouble() - 数值之间的转换::Java 提供了一些数值类型之间的转换方法,如将整型转换为字符型、将字符型转换为整型等。这些转换方式可以通过类型的包装类来实现
4.类型互转会出现什么问题
- 基本数据类型 doble →float都会出现精度损失,因为浮点数表示不同 int→byte会舍弃高位,保留个低位
- 对象引用转换
- 向上转型可以,比如dog像animal转
- 向下会抛异常,Java 会检查对象的实际类型是否与目标类型兼容。如果不兼容,就会抛出
- 可用instanceof检查
5.*为什么用bigDecimal 不用double ?
double为二进制浮点运算,会丢失精度,比如二进制不能表示1/3=0.3333…
- 例如手里有0.06元,却不能购买0.05和0.01元的商品,当电商或金融出现此情况会出现对不上账的情况
- 在创建bigDecimal对象时,传入的应该是字符串(‘0.01’),而不是浮点数,避免精度损失
6.装箱和拆箱是什么
基本数据类型和对应的包装类之间进行转换的过程 发生在:赋值,方法调用
- 弊端
Integer sum = 0; for(int i=1000; i<5000; i ){ sum =i; }在循环中会创建4000个无用的Integer对象,重复垃圾回收,降低性能,在声明变量时避免自动装箱引起的性能问题
7.为什么要有Integer
他是int对应的包装类,将其包装为Object对象
例如:
Java 的集合只能存放对象,不能直接存放基本类型。
所以要想把 int 放进集合,必须先变成它的对象形式——Integer。
这就是为什么 Integer 的存在是必要的
- 泛型中的应用 泛型中只能使用引用类型,不能使用基本类型,假设上面list中存入Integer,可以使用Collections.sort()来快速排序list中的int类型数据
- 转换类型的应用 将int转换为string时,需要先转换为Integer,在使用Interger的.toString()方法变为string
- 集合中的应用(集合框架(List、Set、Map))
计算列表中的和,不需要循环相加,使用Interger的stream方法即可
int sum = list.stream().mapToInt(Integer::intValue).sum();
8.Integer相比int有什么区别
- 引用类型考点:Integer需要通过实例化对象来使用,不同于int需要额外的内存分配.性能较差
- 自动装箱拆箱方便
- 空指针异常:int可以直接赋值0,Integer变量必须通过实例化对象来赋值,不然为null,空指针异常,
9.为什么保留int类型
8.Integer相比int有什么区别效率高,内存小 包装类:对象的引用和对象本身是分开存储的 基本数据:变量对应的内存直接存储数据本身
10.Integer的缓存
Java的Integer类内部实现了一个静态缓存池,用于存储特定范围内的整数值对应的Integer对象。 默认情况下,这个范围是-128至127。当通过Integer.valueOf(int)方法创建一个在这个范围内的整数对象时,并不会每次都生成新的对象实例,而是复用缓存中的现有对象,会直接从内存中取出,不需要新建一个对象。