目录
1.自动类型转换(隐式转换,小类型转换为大类型)
2.强制类型转换(显示转换,大类型转换为小类型)
3.小于4字节的类型转换问题
3.1 byte<->int
3.2 char<->int
3.3 String<->int
Java作为一个强类型的编程语言,当不同类型之间的变量相互赋值的时候,会有较严格的校验。在Java中,当参与运算不一致时,就会进行类型转换。Java中类型转换主要分为两类:自动类型转换(隐式)和强制类型转换(显示)。
Java数据类型的数据范围:
补充:计算机存储数据都是二进制的01整型,float和double不是按照二进制计算的,而是按照科学计数法来模拟存储数据的。
- float转换为二进制,大概是2^128数量级的数字
- double转换为二进制,大概是2^300数量级的数字
注意:只有有关系的类型之间才能转换,毫无关系的类型不能转换
boolean<->int毫无关系,不能发送互相转换
1.自动类型转换(隐式转换,小类型转换为大类型)
自动类型转换:代码不需要经过任何处理,在代码编译时,编译器会自动进行处理
特点:数据范围小的转为数据范围大的时会自动进行
两种情况:
a.不参与运算时,直接赋值
int a=3;
long b=a;//int->long
b.小类型与大类型共同参与运算时,小类型先提升为大类型然后参与运算
int a=10;
double b=2.0;
double result=a/b;//int->double然后再double/double
2.强制类型转换(显示转换,大类型转换为小类型)
强制类型转换:当进行操作时,代码需要经过一定的格式处理,不能自动完成。
特点:数据范围大->数据范围小(可能出现精度丢失,丢掉小数点或者数据溢出)
//示例1
long a=10;
int b=(int)a;//long->int需要强制转换
//示例2
long a=100;
float b=a;//这个属于小类型转换为大类型的隐式提升
3.小于4字节的类型转换问题
3.1 byte<->int
1.直接赋值
若整型字面量在byte数值的保存范围内,可以直接赋值给byte不需要转换
byte a=120;//可以直接赋值,不需要强转
若整型字面量在byte数值的保存范围之外,需要强制类型转换
byte b=(byte)130;//130超出了byte的保存范围,需要强制类型转换
若拿整型变量给byte赋值,无论这个变量保存的数值在不在byte的范围之内,都需要强转
int a=10;
byte c=(byte)a;//a是int变量,编译器编译时无法确定数值,因此都需要强转
2.byte变量的运算
CPU在内存进行读写时,都是按照4字节来进行读写,因此小于4字节的数据类型byte,char,short参与数学运算时,统一提升为int之后再参与运算。
byte a=10;
byte b=20;
byte c=a+b;//byte+byte=>int+int=int
final:声明常量。final修饰的变量成为常量,常量一旦赋值后,值不能改。
被final修饰的变量,除了值定义后不能改,存储在计算机内部时,类型也不能转换!
此时a和b参与运算时,被final修饰,因此CPU读写时就是按照原来的byte类型进行读写。
final byte a=10;
final byte b=20;
byte c=a+b;//不再报错了
3.2 char<->int
计算机存储任何数据最终都是01二进制整数串,字符在存储时,就需要有规则将每个字符唯一的映射成一个整型数字。
这里介绍一个ASCII码编码规则:
ASCII 码规定使用一个字节来存储英文字符,最前面的一位统一规定为0,不同的字符由后面的7位确定, 所以ASCII码一共规定了128个字符的编码,其中包括:
- 96个可打印字符
- 大写英文字符和小写英文字符
- 阿拉伯数字
- 标点符号
- 特殊符号
- 32个不可打印的控制符号
1.char->int按照编码规则自动转换
char a='a';
char b='A';
char c='铭';
int num1=a;
int num2=b;
int num3=c;
2. int->char 强制类型转换
int数值必须在char的范围内[2^15]的数字才能有对应的字符对应。
123456已经超过了char的范围,所以没有对应的字符。
思考:编程实现小写字符转为大写字符
char a='a';
char b=(char)(a-32);//结果为A
3.3 String<->int
1.int->String
a.直接拼接
Java中任意类型只要和字符出对象+,统统都转为字符串拼接操作
加上括号,先进行int+int=int操作,再进行拼接
2.任意类型->String
使用String提供的方法valueOf方法
3.String->int
调用Integer.parseInt(str);//将字符转str转为int
前提:这个str字符串变量必须由纯数字组成的,不能包含其它数据,字母都不行,否则会转换出错
不由纯数字组成时,会报错