基本数据类型间的转换包括
自动类型转换
和强制类型转换
,本文还讲了基本数据类型和String类型间的转换,这些是学习的重点,掌握这些之后还有其他想法或疑问,都可以自己尝试用代码验证结果,总之多实践比死记硬背更有用。🤨🤨
文章目录
- 1、自动类型转换
- 1.1、自动类型转换介绍
- 1.2、自动类型转换细节
- 2、强制类型转换
- 2.1、强制类型转换介绍
- 2.2、强制类型转换细节
- 3、基本数据类型转换练习
- 4、基本数据类型和String类型的转换
- 4.1、基本数据类型 ---> String
- 4.2、String ---> 基本数据类型
- 4.3、将字符串转换为字符 ---> 即把字符串的第一个字符得到
- 4.4、基本数据类型和String类型转换的细节
1、自动类型转换
1.1、自动类型转换介绍
可以跨精度,只要是精度小的数据类型就可以自动转换为精度大的数据类型
🦉🦉代码演示:
1.2、自动类型转换细节
🐮🐮有 多种类型的数据 混合运算时,系统首先自动将所有数据转换成 容量最大 的那种数据类型,然后再进行运算:
🐮🐮当我们把精度(容量)大数据类型赋值给精度(容量)小的数据类型,就会报错,反之就会进行自动类型转换:
int n1 = 1.1 //错 double =》 int
🐮🐮(byte,short)和char之间不会相互自动转换:
- 当把具体数赋给某数据类型时,系统会先判断该数是否在此数据类型的范围内,若是则语法正确,否则报错。
- 当把变量赋值给某数据类型时,系统则会先判断该变量的数据类型,若能进行自动类型转换则语法正确,否则报错。
🐮🐮(byte,short,char)它们三者可以计算,在计算时首先转换为int类型;
byte b2 = 1;
byte b3 = 2;
short s1 = 1;
//short s2 = b2 + s1;//错 , b2 + s1 => int
int s2 = b2 + s1;//对 , b2 + s1 => int
//byte b4 = b2 + b3;//错 , b2 + b3 => int
ps : 只要是三者中的一个类型进行计算,结果都会转换为int。
🐮🐮boolean不参与自动转换:
boolean pass = true;
//int num100 = pass;//boolean不参与自动转换
🐮🐮自动提升原则:表达式结果的类型 自动提升为 操作数中最大的类型:
byte n1 = 1;
short n2 = 10;
int n3 = 100;
float n4 = 5.1f;double n5 = n1 + n2 + n3 + n4;// float--> double √
int n5 = n1 + n2 + n3 + n4;// float--> int ×
float n5 = n1 + n2 + n3 + n4;// float--> float √
2、强制类型转换
2.1、强制类型转换介绍
自动类型转换的逆过程
,将容量大的数据类型转换为容量小的数据类型,使用时需加上强制转换符( )
,但会造成精度降低或溢出,所以使用时要格外小心。
🚚🚚代码演示:
对于n1,如果对精度有要求时,精度的损失将会影响项目。
对于b1,2000远超了byte的数据范围以至于数据溢出,导致运行后的结果不可预估。
2.2、强制类型转换细节
- 当将容量大的数据类型转换为容量小的数据类型,需要使用强制转换。
- byte、short和char在进行运算时,会当做int类型处理。关于这条的理解可以看基本数据类型讲解浮点类型使用细节部分。
☘️☘️强转符号只针对于最近的操作数有效,往往会使用小括号提升优先级:
//int x = (int)10 * 3.5 + 6 * 1.5;//编译错误:double -> int
int x = (int)(10 * 3.5 + 6 * 1.5);//(int)44.0 -> 44
System.out.println(x);//44
☘️☘️char类型可以保存int型常量,但不可以保存int型变量,需要强转:
char c1 = 100; //ok
int m = 100; //ok
//char c2 = m; //错误
char c3 = (char)m; //ok
System.out.println(c3); //100对应的字符《==》d字符
3、基本数据类型转换练习
//判断是否能够通过编译:
1、short s = 12;//ok
s = s - 9;//错误 int->short
2、byte b = 10;//ok
b = b + 11;//错误 int->byte
b = (byte)(b + 11);//ok 强转
3、char c = 'a';//ok
int i = 10;//ok
float d = .314F;//ok
double result = c + i + d;//ok float->double
4、byte b = 16;//ok
short s = 14;//ok
short t = s + b;//错误 int->short
4、基本数据类型和String类型的转换
4.1、基本数据类型 —> String
将基本类型的值+"" 即可。
4.2、String —> 基本数据类型
通过基本类型的包装类调用parsexxx方法即可,其中parse 代表 [解析]。
4.3、将字符串转换为字符 —> 即把字符串的第一个字符得到
System.out.println(s5.charAt(0)); // 得到字符'1',s5:"123"
//s5.charAt(0)解读:得到字符串s5的第 0 位字符(即第一个字符'1',国外是从0开始数)
4.4、基本数据类型和String类型转换的细节
-
当 基本数据类型 转换为 String类型 时不会抛出格式异常的错误。
-
当 String类型 转换为 基本数据类型 时,要确保String类型能转换为有效的数据类型,如"123"可以转换为整数,而"hello"转换为整数时将会抛出格式异常的错误。
-
如果格式不正确,就会抛出异常,程序就会终止。
public class StringToBasciDetail(){public static void main(String[] args){String str1 = "123";int num1 = Integer.parseInt(str1);System.out.println(num); //123 √String str2 = "hello";int num2 = Integer.parseInt(str2);System.out.println(num); //× 格式异常 系统不知道怎么将"hello"转换为整数}
}
程序异常如下: