数据类型(掌握)
(1)Java是一种强类型语言,针对每种数据都提供了对应的数据类型。
(2)分类:
A:基本数据类型:4类8种
B:引用数据类型:类,接口,数组。
(3)基本数据类型
A:整数 占用字节数
byte 1
short 2
int 4
long 8
B:浮点数
float 4
double 8
C:字符
char 2
D:布尔
boolean 1
注意:
整数默认是int类型,浮点数默认是double。
长整数要加L或者l。
单精度的浮点数要加F或者f。
Java中整数默认是int类型的,小数默认是double类型的
一般来说,我们在运算的时候,要求参与运算的数据类型必须一致。
而当运算符两边的数据类型不一致时,就可能会默认转换
注意:
boolean类型不能转换为其他的数据类型
默认转换(从小到大的转换)
A:byte,short,char—int—long—float—double
B:byte,short,char相互之间不转换,他们参与运算首先转换为int类型
class DataTypeDemo3 {
public static void main(String[] args) {
//直接输出的方式做加法
//System.out.println(3 + 4);
//两个int类型做加法
int x = 3;
int y = 4;
int z = x + y;
System.out.println(z);
//定义一个byte类型,一个int类型,做加法
byte a = 3;
int b = 4;
System.out.println(a + b);
//可能损失精度
//byte c = a + b;
int c = a + b;
System.out.println(c);
}
}
有时为了需求,java提供了强制转换功能
强制转换:
从大的数据类型到小的数据类型。
byte a = 3;
int b = 4;
byte c = (byte) (a + b);
格式:
目标数据类型 变量 = (目标数据类型) (被转换的数据);
注意:
不要随意的去使用强制转换,因为它隐含了精度损失问题。
下面操作可能会丢失精度
double d = 12.3452222;
float f = (float)d;
问题:
下面两式定义有何区别
float f1 = (float)12.345;
通过将double类型强制转换得到
float f2 = 12.345F;
本身就是float类型数据
面试题:
byte b1=3,b2=4,b;
b=b1+b2;//这个是类型提升(默认转换为int),所有有问题
b=3+4;//常量,先把结果计算出来,然后看是否在byte的范围内,如果在就不报错。
哪句是编译失败的呢?为什么呢?
b = b1 + b2;是有问题的。
因为变量相加,会首先看类型问题,最终把结果赋值的也会考虑类型问题。
常量相加,首先做加法,然后看结果是否在赋值的数据类型范围内,如果不是,才报错