Java八大数据类型:
(1)整数类型:byte、short、int、long
(2)小数类型:float、double
(3)字符类型:char
(4)布尔类型:boolean
1、 整数数据类型
byte:1个字节,8位,256种状态,取值范围为【-128,127】
short:2个字节,16位,65536种状态,取值范围为【-32768,32767】
int:4个字节,32位,整数类型默认是int类型,取值范围约21亿
long:8个字节,64位,long类型表示long类型常量,要加L或者l,建议加L
2、 小数数据类型
float:4个字节,32位,单精度,能精确到6~7位,声明一个小数类型,要加F或者f,建议加F
double:8个字节,64位,双精度,能精确到15~16位,小数类型默认是double类型
3、 字符数据类型
char:2个字节,16位,字符表示Unicode(万国码)编码表中的每一个符号,每个符号使用单引号引起来,其中前128个符号和ASCII表相同
4、 布尔数据类型
boolean:占1位,有true和false2个值,一个表示真,一个表示假,一般用于表示逻辑运算
数据类型自动转换路线:
byte => short => int => long => float => double
char => int => long => float => double
注意:char 不可以和 byte、short相互转换
总结:
1.byte、short、char 是可以通过转成int可以进行相互计算的
2.类型的自动转换都是自动变成大的数据类型(char 不可以和 byte、short相互转换)
3.牵扯到float和double就要注意精度问题。
注意: 1)float和float自己的运算:
①小数点后位数相同,精度没问题
②小数点后不同精度出现问题
2)double和double自己的运算,精度会出现问题(不论什么情况)
3)double和float之间的运算,精度会出现问题(不论什么情况)
代码示例和注意事项:
package com.gao.test.datatype;
/**
* @Author lie
* @Description
*/
public class DataType {
public static void main(String[] args) {
byte b1 = 10; // 取值范围 -128 ~127
short s1 = 130;
int i = b1 + s1; // byte+short ==> int
byte b2 = 30;
char c2 = 136;
int i2 = b2 + c2; // byte+char ==> int
// byte b3 = b1 + b2; //错的,只要运算就转换成int了
int i3 = 100;
float f1 = 1.1f;
float f2 = 1.22f;
float f3 = 1.33f;
double d1 = 1.1;
double d2 = 2.22222222;
double d3 = 3.33333333333;
System.out.println(i); // 140
System.out.println(i2); // 166
System.out.println("f1 = "+f1); // 1.1
System.out.println("f1+f2+f3 = "+(f1+f2+f3)); // 3.65 精度没有问题
System.out.println(f1+i3); // 101.1
System.out.println(f1+d1); // 2.200000023841858 : float 和 double之间的运算要注意
System.out.println(i3+f1+d1); // 102.19999847412109
System.out.println(d1+d2); // 3.3000000000000003 double 自己之间的运算也要注意精度问题
System.out.println(i3+d1+d2); // 103.3 有int参与精度回复正常了
System.out.println(i3+d1+d2+d3); // 106.65555555333 有int参与精度回复正常了
//结论:byte、short、char 是可以通过转成int可以进行相互计算的
}
}