基本数据类型:
整数型:byte(-128-127)、 short 、int(-21亿-21亿)、 long(19位数字)
浮点型 float double
字符型 char
布尔型 boolean
引用数据类型:
类、数组、接口、字符串、Lambda
注意事项:
1、字符串不是基本数据类型
2、浮点数默认类型是double,如果一定使用float类型,需要加一个后缀F
3. 整数型默认类型为int,如果一定使用long类型,需要加一个后缀L
4.float 类型取值范围比long类型还大
数据类型转换:当数据类型不一样时,会发生数据类型转换
1) 自动类型转换(隐式)
特点:代码不需要做特殊处理,自动完成
规则:数据范围从小到大
public class Demo01Datatype{ public static void main(String[] args) { /*左边是long类型,右边默认是int类型,左右不一样 一个等号代表赋值,将右边的int常量赋值给左边的long类型变量存储 int-->long ,符合了数据范围从小变化 这行代码发生了数据类型自动转换 */ long num1=100; System.out.println(num1);//100 /*左边是double类型,右边是float类型,左右不一致* float-->double,符合从小到大的规则 自动类型转换 */ double num2= 3.5F; System.out.println(num2);//3.5 /*左边是float类型,右边是int类型,左右不一致* int-->float,符合从小到大的规则 自动类型转换 */ float num3= 100L; System.out.println(num3);//100.0 } }
2)强制类型转换
特点:代码需要特殊的格式处理,不能自动完成。从大到小
格式: 范围小的类型 范围小的变量名= (范围小的类型) 原本范围大的数据; 比如 int num=(int) 200L;
/* 左边是int类型,右边是long类型,不一样, long--->int, 大到小,不会发生自动类型转换 格式: 范围小的数据类型 范围小的变量名=(范围小的数据类型) 范围大的数据 */ public class Demo02Datatype{ public static void main(String[] args){ int num= (int)100L; System.out.println(num); } }
类型转换的注意事项:
1。强制类型转换一般不推荐使用户,因为可能发生精度损失、数据溢出
2.byte/char/short 这三种类型的数据都可以发生数学运算,例如‘+’
3.byte/short/char 这三种数据类型在运算时,都会被首先提升为int类型,然后在计算
4. boolean 类型不能发生数据类型转换
public class Demo02Datatype{ public static void main(String[] args){ int num1= (int)6000000000L; System.out.println(num1); //1705032704 发生数据溢出,因为60亿大于int类型最大范围 int num2= (int)3.14F; System.out.println(num2); //3,发生了精度损失 char num3='A'; short num4= 34; int num5= num3+num4; System.out.println(num5); //99 , char和short 类型在运算时默认会提升为int类型 } }
在给变量进行赋值的时候,如果右侧的表达式当中全都是常量,没有任何变量,
那么编译器javac将会直接将若干个常量表达式计算得到结果。
short result = 5 + 8; // 等号右边全都是常量,没有任何变量参与运算
编译之后,得到的.class字节码文件当中相当于【直接就是】:
short result = 13;