Java是强类型语言,每个变量都必须有它的数据类型,而且变量之间不能随便转换数据类型python
主流的语言大多都是强类型 C、C++、Java、python程序员
弱类型语言数组
PHPspa
什么是数据类型?code
- 数据类型,表示的是一个数据集合和基于该数据集合的一组合法操做
数据类型怎么分类?接口
- 基本数据类型:JDK默认提供
- 引用数据类型
- 类
- 接口
- ....
基本数据类型(base date type)
有哪些基本数据类型?内存
四类八种ci
- 整型
- byte:字节型,占1个字节空间
- short:短整型,占2个字节空间
- int:整型,占4个字节空间
- long:长整型,占8个字节空间
- 浮点型
- float:单精度浮点型,占4个字节
- double:双精度浮点型,占8个字节
- 字符类型
- char:占4个字节,表示单个字符
- 布尔类型
- boolean:具体占多少内存,了解便可
- 根据JVM规范,在内存中boolean看成int处理,占4个字节
- boolean数组当成byte数组处理,一个boolean元素占1个字节
- boolean:具体占多少内存,了解便可
基本数值类型的取值范围
基本数据类型 | 字节长度 | 大小(位) | 最小值 | 最大值 | 取值范围 |
---|---|---|---|---|---|
byte | 1字节 | 8bit | -2^7 | 2^7-1 | -128 ~ 127 |
short | 2字节 | 16bit | -2^15 | 2^15-1 | -32768 ~ 32767 |
int | 4字节 | 32bit | -2^31 | 2^31-1 | -2147483648 ~ 2147483647(21亿出头) |
long | 8字节 | 64bit | -2^63 | 2^63-1 | -9223372036854774808 ~ 9223372036854774807(大概922亿亿) |
float | 4字节 | 32bit | - | - | -3.403E383.404E38(有效位数67位) |
double | 8字节 | 64bit | - | - | -1.798E308~1.798E308(有效数字15位) |
引用数据类型(reference)
碍于知识点的限制,目前只要知道字符串(String)是一种引用数据类型便可字符串
String属于引用数据类型中的类it
基本数据类型的数据类型转换(conversion)
什么是数据类型转换呢?
- Java是强类型语言,变量一旦声明后,数据类型不会轻易改变,但也并不是彻底不可能改变
- 咱们将Java中变量的数据类型由某一种转换为另外一种,这个过程叫作数据类型转换
数据类型转换的分类
- 自动类型转换,也叫向上转型
- 强制类型转换,也叫向下转型
基本数据类型的自动类型转换(automatic)
什么是自动类型转换?
- 数据类型无需程序员操做,由系统自动转换
基本数据类型的自动类型转换的规则
- byte、short、char之间不互相转换,一旦之间发生运算,一概自动转换为int进行运算,结果是int
- byte、short、char任一数据类型与int进行计算,一概自动转换为int进行计算,结果是int
- byte、short、char、int任一数据类型与long进行计算,一概自动转换为long进行计算,结果是long
- byte、short、char、int、long任一数据类型与float进行计算,一概自动转换为float进行计算,结果是float
- byte、short、char、int、long、float任一数据类型与double进行计算,一概自动转换为double进行计算,结果是double
精度问题
-
当大变小时,有可能会出现新的数据类型没法容纳所有的数据,致使部分信息被截断丢失,数据失真
- 这种现象,有一个专业名词叫”精度损失“
-
当int、long(4字节,8字节)自动转换成float(4字节)时,可能会由精度损失
-
当long自动转换成double(8字节)时,也可能产生精度损失
基本数据类型的强制类型转换(cast)
什么是强制类型转换
- 数据类型的转换须要程序员显式操做,不然报错
何时须要强制类型转换
- 在特别有必要的状况下,把一个占内存大的数据类型,转换成小的数据类型,好比int---->byte
语法
目标数据类型 变量名 = (目标数据类型)(被转换的变量变量名);
精度问题
- 强制类型转换,大变小,精度损失是很常见的
- 强烈建议,若是不是不进行强制类型转换,程序就GG,不要使用强制类型转换,稍有不慎会致使bug
- 进行强制类型转换,要严格考量,数据类型的取值范围,像(byte)200这种行为是很滑稽的
补充
- boolean类型和其余数据类型之间不能经过强制类型转换语法直接转换