Java程序要求参加的计算的数据,必须保证数据类型的完整性,如果数据类型不一致,则数据类型变换1.1 自动转换
将一个int型变量和一个byte型变量相加,会变成什么样的数据类型?
int i=1;
byte b=2;
运算的结果是变量的类型为int型。 这就是数据类型的自动类型转换现象。
自动转换:自动将取值范围小的类型提升为取值范围大的类型。
代码如下所示
publicstaticvoidmain (string [ ] args ) {int i=1; byte b=2; //byte x=b i; //错误//int型和byte型的运算结果为int型int j=b i; system.out.println(j ); }转换原理图
byte型存储器占用1个字节,如果运算为int型,则升级为int型,自动补充3个字节,所以计算的结果还是int类
类型。
同样,对int和double变量进行运算时,int类型会自动升级为double类型进行运算。
代码如下所示
publicstaticvoidmain (string [ ] args ) {int i=1; double d=2.5; //int型和double型的运算结果表明,double型//int型为double型double e=d i; system.out.println(e; }转换规则
范围小的类型升级为范围大的类型,byte、short、char运算时直接升级为int。
字节、短字节、字符- -长整型- -浮点型- -双精度
1.2 强制转换
将1.5代入int型变量会发生什么? 编译失败了。 无法分配值。
int i=1.5; //错误
双精度型存储器为8字节,int型存储器为4字节。 1.5是双精度类型,值的范围大于int。 double可以理解为8升水壶,int可以理解为4升水壶。 大水壶里的水不能直接放进小水壶里。
想要赋值成功,只有通过强制类型转换,将 double 类型强制转换成 int 类型才能赋值。
强制类型转换:将 取值范围大的类型 强制转换成 取值范围小的类型 。
另一方面,自动转换由Java自动执行,但强制转换必须自己手动执行。
转换格式:
数据类型变量名=(数据类型)转换后的数据值
将1.5指定给int类型,然后将代码更改为:
//double型数据强制转换为int型,直接去除小数点。
intI=(int ) 1.5;
同样,我们知道将1加到一个短类型会提高类型,但是如果尝试将结果代入短类型变量,则必须强制转换。
publicstaticvoidmain (string [ ] args ) {//short类型变量,内存中2字节的short s=1; /*编译失败的s和1进行运算时,1是int型,s是升级为int型s 1的结果是int型,将结果代入short型时发生错误,short存储器必须转换为2字节,int型4字节必须将int强制转换为short //编译失败的s=(short ) ) s 1; //编译成功}转换原理图解
请注意,如果浮点转换为整数,并且小数点被撤消,则可能会影响数据的精度。 如果int强制转换为short并截断2个字节,则可能会丢失数据。
//s定义为短范围内的最大值
短s=32767;
//运算后,强制转换,砍掉2字节会产生不确定的结果
s=(short ) ) s 10;
1.3 ASCII编码表
publicstaticvoidmain (string [ ] args )//字符类型变量char c='a '; int i=1; //字符类型和int类型计算system.out.println(cI ); //输出结果98}在电脑内部是二进制的0、1数据,如何使电脑能够直接识别人类的文字? 编码表的概念应运而生。
编码表:是指把人类的文字和十进制对应起来形成一张表。
人们规定如下
由于所有字母、数字和符号都与十进制对应,因此产生了世界上第一个代码表ASCII (美国标准信息交换代码)。
贴标机:在char型和int型的计算过程中,char型字符首先查询码表,得到97,与1相加,结果为98。 改进的char类型
为了int类型。 char型存储器是2字节,int型存储器是4字节。