一、数据类型分类
二、数据类型转换
1. 小到大(隐式转换)代码如下:
byte a = 120;
int b = a;
System.out.print(b) // 120 小类型byte向大类型int直接自动转化
2. 大到小(显式转换)代码如下:
int a = 120;
byte b = (byte)a;
System.out.print(b) // 120 大类型int向小类型byte转化时需要强制转化(前面加个括号)
3. 小数转成整数,小数部分直接舍弃
double a = 6.6;
int b = (int)a;
System.out.print(b) // 6
4. char类型转化
- 可以隐式转化为int、double
- 可以强转为byte、short
- 但char是值类型,不知自动转化为引用类型的String,只能用其他方法转化,比如
String s = String.valueOf('c')
三、运算规则
1. 计算结果的数据类型,与两个运算数之间最的大类型一致
int a = 3;
System.out.print(a/2) // 得1,而不是1.5 结果是int型
double b = 3;
System.out.print(a/2) // 得1.5 相当于double/int,结果是double型
short s1=1;s1=s1+1;有什么错?
s1+1运算时会自动提升表达式的类型,所以结果是int型,再赋值给short类型s1时,编译器将报告需要强制转换类型的错误。
short s2=1;s2+=1;有什么错?
由于 += 是java语言规定的运算符,java编译器会对它进行特殊处理,因此可以正确编译。
2. 整数运算溢出
比如int支持的范围大约是正负21亿,
int a = 20亿
int b = 10
long = a*b
上面这种,即使long支持正负200亿,结果也是会溢出的,因为a和b都是int型,他俩相乘,还没赋值给long的时候就已经溢出了,正确的写法是long = a * long(b),即任意一个乘数预先提升一下表示范围
3. 浮点数的特殊值
System.out.print(3.14/0) // Infinity 无穷大
System.out.print(0/0.0) // Nan
4. Float和Double怎样比较大小
float 和double 类型不能直接比较相等或不等,但可以比较>,<,>=,<=
用==从语法上说没错,但是本来应该相等的两个浮点数由于计算机内部表示的原因可能略有微小的误差,这时用就会认为它们不等。可以使用两个浮点数之间的差异的绝对值小于某个可以接受的值来判断判断它们是否相等。
5. Double和Double怎样比较相等
在Java中int类型数据的大小比较可以使用双等号,double类型则不能使用双等号来比较大小,如果使用的话得到的结果将永远是不相等,即使两者的精度是相同的也不可以。下面介绍两种比较double数据是否相等的方法。
第一种方法:转换成字符串
如果要比较的两个double数据的字符串精度相等,可以将数据转换成string然后借助string的equals方法来间接实现比较两个double数据是否相等。但是不能比较谁大谁小。
第二种方法:使用sun提供的Double.doubleToLongBits()方法
该方法可以将double转换成long型数据,从而可以使double按照long的方法(<, >, ==)判断是否大小和是否相等。例如:
Double.doubleToLongBits(0.01) == Double.doubleToLongBits(0.01)
Double.doubleToLongBits(0.02) > Double.doubleToLongBits(0.01)
Double.doubleToLongBits(0.02) < Double.doubleToLongBits(0.01)