一、java的数据类型
1.分类
分类概括图如下图
2.数据范围:
数据类型 关键字 在内存中所占字节数 位数 范围 默认值
字
节
型 byte 1 8 -128~127 0
短整型 short 2 16 -215~215-1 0
整型 int 4 32 -231~231-1 0
长整型 long 8 64 -263~263-1 0
布尔型 boolean 1 8 true,false false
字符型 char 2 16 0~216-1 '\u0000'
单精度浮
点型 float 4 32 1.4013E-45 0.0F
~3.4.28E+38
双精度浮
点型 double 8 64 4.9E-324~ 0.0D
1.7977E+308
分析以下问题
(1).java的数据类型所表示的十进制数是怎么算出来的?
答:以数值型举例:
byte型 占1个字节=8位 -------数据范围是 :-28-1~28-1-1
short型占2个字节=16位------数据范围是:-216-1~216-1-1
int型占4个字节 = 32位-------数据范围是:-232-1~232-1-1
由此可以得出一下计算公式
数据范围:-2n-1~2n-1-1 其中n位数据类型所占的二进制位数
(2).为什么要定义变量?
答:用来不断存放同一类型的常量,并且可以重复使用。
(3).数据类型的作用?
答:一是确定变量数据所属类型,二是确定变量在内存空间的所占的大小。
注意:整数默认为int型,小数
默认为double型;
在定义long型和float型变量时的格式分别如下:
long a=50L;
float b=50F
全局变量和局部变量
全局变量:定义在方法外部,类的内部的变量
局部变量: 定义在方法内部,或者语句块的内部的变量
变量的作用域:从变量定义所在的花括号开始,到花括号结束;即是在{ }之间,要注意的是一定要给初始值。
2.类型转换
(1).自动类型转换的特点
a.所有的byte型,short型和 char型 将被提升到int
b.如果一个操作数是long型,计算结果就是long型
c.如果一个操作数是float型,计算结果就是float型
d.如果一个操作数是double型,计算结果就是double型
(2).强制类型转换
语法:取值范围较小的数据类型 变量名 = (取值范围较小的数据类型)取值范围较大变量
举例:int num=20;
byte num2=(byte)num;
关于类型转换中的损失精度的问题
下面哪条语句是编译失败的呢?为什么?
byte a1=5,a2=7,c;
c=a1+a2;
c=5+7;
答:第二条语句显然会编译失败,原因是:byte型数据在参与运算时会自动提升为int
型,则计算结果就为int型了;然而语句c=a1+a2等效为----->byte = int 即将int
型数据放到了byte类型的变量中;显然会损失精度,所以编译会失败。
c=a1+a2;
c=5+7;
答:第二条语句显然会编译失败,原因是:byte型数据在参与运算时会自动提升为int
型,则计算结果就为int型了;然而语句c=a1+a2等效为----->byte = int 即将int
型数据放到了byte类型的变量中;显然会损失精度,所以编译会失败。
解决办法:使用强制类型转换-------将出错的语句即第二条语句改为如下则编通过
c=(byte)(a1+a2);
注意:一旦byte、short、char类型的变量参与运算,其运算结果为int型-----先自动提升为int再参与运算