一、数据的类型转换
因程序的需求,数据类型是可以相互转换的,数据类型转换分为两种,第一是隐式转换,第二是显式转换;
1、隐式转换
转换条件
转换场景:在赋值与运算的时候
转换条件:右侧的值必须小于声明变量的范围
参考 右边的值的类型范围小于声明变量类型的范围 如 long num1 = 80;
特点:隐式转换自动完成
//声明一个类名称
public class Demon3Var{
//声明一个公开的构造方法
public static void main(String[] args){
//证明long类型不需要加L 隐式转换
//为int类型 向 long 类型转换
long num1 = 100;
System.out.println(num1);
//右侧是float类型 左侧是long类型 符合从小到大,发生隐式转换
float num4 = 30L;
System.out.println(num4);
//如果右侧值类型范围比声明数据类型要小(其实不用)
Byte num5 = 1000;
System.out.println(num5);
}
}
2.关于数据类型和变量与值的辩证
数据类型对变量和常量进行生效,我们定义的常量默认的与被允许指定的共有 int long double float 其它无法指定
我们需要通过将常量赋值给指定的变量类型,使其发生隐式转换~
声明的常量类型是否需要加L F D等等 不同类型的区间值是有交集的,值在交集部分中时不需要声明类型的,而超过所定义的最大区间则需要指明类型
2.显式转换
转换语法:
特点: 代码需要进行特殊的格式处理,不能自动完成
格式: 范围小的类型 范围小的变量名 = (范围小的类型)原本范围大的数据;
注意事项:
强制类型转换一般不推荐使用,因为有可能发生精度损失、数据溢出问题。在浮点型向number转换就会丢失精度,在大的值向小范围区间类型变量赋值就会出现数据溢出;
byte/short/char 三种是可以发生数学运算的
Byte/short/char 三种类型晕眩的时候,都会被提升成为int类型,然后在进行计算
boolean类型 不能发生数据类型转换
public class Demon4Var{
public static void main(String[] args){
//将int类型转换为byte类型
//左侧为int变量范围小 右侧范围long大 但是100也是int中交集可以转换
int num1 = (int) 100L;
System.out.println(num1);
//如果将long的60亿转换成int类型会有数据丢失,因为int类型最大支持20多个亿
int num2 = (int) 6000000000L;
System.out.println(num2);//结果为1705032704 数据丢失
//如果将浮点型转换成整型 会丢失精度
int num3 = (int) 3.14;
System.out.println(num3);//结果为3 精度丢失
//byte/short/char 都是可以进行计算,char字符会被转成ASCLL表中的值
int num4 = 'A' + 1;
System.out.println(num4);//结果为66
//byte/short/char 在进行计算的时候 都会被隐式转换成int类型
byte num5 = 20;
short num6 = 20;
char num7 = 'A';
int result = num5+num6+num7;//在进行计算的时候 都被转换成int类型 所以接受变量类型用int
System.out.println(result);
}
}
二、ASCLL 编码表
上面所知道字符也是可以进行计算的,计算机一切数据底层都是二进制,我们的字符在运算的时候会用底层数据,而这个对应规则为计算机的ASCLL编码表以及unicode编码表;
ASCLL 美国信息交换标准代码,他包含了英文大小写字符、特殊符号等信息与二进制文件映射关系
unicode 码表: 万国码 也是数字和符号的对照关系 0-127和ASCII完全一样,但是从之后包含更多字符汉子,以及表情符号
public class Demon5Var{
public static void main(String[] args){
//在进行运算的时候,是字符所对应底层的数字用于参与计算
char str = 'A';
System.out.println(str+0);//结果为65
}
}