基本数据类型的转换 (基础完整篇)

本文详细介绍了Java中基本数据类型的自动类型转换和强制类型转换,包括转换规则、细节及与String之间的转换。强调实践中理解转换原理的重要性,并提醒注意转换可能导致的精度损失或异常。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述

基本数据类型间的转换包括 自动类型转换强制类型转换 ,本文还讲了基本数据类型和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、基本数据类型转换练习

//判断是否能够通过编译:
1short s = 12;//ok
s = s - 9;//错误 int->short
2、byte b = 10;//ok
b = b + 11//错误 int->byte
b = (byte)(b + 11);//ok 强转
3char 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"转换为整数
		
	}
}

程序异常如下:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值