原文:https://blog.csdn.net/thebigdipperbdx/article/details/81047288
列举
byte(字节型)、short(短整型)、int(整型)、long(长整型)、float(单精度浮点型)、double(双精度浮点型)、boolean(布尔型)、char(字符型)
对应包装类
java.lang.Byte、java.lang.Short、java.lang.Integer、java.lang.Long、java.lang.Float、java.lang.Double、java.lang.Boolean、java.lang.Character
详细划分
- 整型 byte short int long
- 浮点型 float double
- 逻辑型 boolean
- 字符型 char
八种基本数据类型的默认值
序号 | 数据类型 | 大小/位 | 封装类 | 默认值(零值) | 可表示数据范围 |
---|---|---|---|---|---|
1 | byte(字节) | 8-bit | Byte | (byte)0 | -128~127 |
2 | short(短整数) | 16-bit | Short | (short)0 | -32768~32767 |
3 | int(整数) | 32-bit | Integer | 0 | -2147483648~2147483647 |
4 | long(长整数) | 64-bit | Long | 0L | -9223372036854775808~9223372036854775807 |
5 | float(单精度) | 32-bit | Float | 0.0F | 1.4E-45~3.4028235E38 |
6 | double(双精度) | 64-bit | Double | 0.0D | 4.9E-324~1.7976931348623157E308 |
7 | boolean | https://4m.cn/d2QKt | Boolean | flase | true或false |
8 | char(字符) | 16-bit | Character | ‘\u0000’(对应数字0,输出为空) | 0~65535 |
八种基本类型的包装类和常量池
- Java 基本类型的包装类的大部分都实现了常量池技术,即 Byte,Short,Integer,Long,Character,Boolean;这 5 种包装类默认创建了数值[-128,127] 的相应类型的缓存数据,但是超出此范围仍然会去创建新的对象。
- 两种浮点数类型的包装类 Float,Double 并没有实现常量池技术。
具体实现,Integer的静态内部类IntegerCache,Long的静态内部类LongCache
ClassUtils源码
org.springframework.util.ClassUtils
数值自动转换
char可以转型成int,但是Character是绝对不会转型为Integer的,它只能安全地转型为它实现的接口或父类。
- 转换原则:从低精度向高精度转换byte 、short、int、long、float、double、char
- 数据类型的转换,分为自动转换和强制转换。自动转换是程序在执行过程中“悄然”进行的转换,不需要用户提前声明,一般是从位数低的类型向位数高的类型转换;强制类型转换则必须在代码中声明,转换顺序不受限制。
自动数据类型转换
- 自动转换按从低到高的顺序转换。不同类型数据间的优先关系如下:
低--------------------------------------------->高
byte,short,char-> int -> long -> float -> double- 运算中,不同类型的数据先转化为同一类型,然后进行运算,转换规则如下:
操作数1类型 | 操作数2类型 | 转换后的类型 |
---|---|---|
byte、short、char | int | int |
byte、short、char、int | long | long |
byte、short、char、int 、long | float | float |
byte、short、char、int 、long、float | double | double |
强制数据类型转换
强制转换的格式是在需要转型的数据前加上“( )”,然后在括号内加入需要转化的数据类型。有的数据经过转型运算后,精度会丢失,而有的会更加精确,下面的例子可以说明这个问题。