2021-07-23


前言

  • 由于Java是强类型语言,所以要进行有些运算的时候需要进行类型转换;
    在这里插入图片描述

  • 运算中,不同类型的数据先转化为同一类型,然后在进行运算;

  • 强制类型转换

  • 自动类型转换


强制转换与自动转换详解

1.强制转换格式 :(类型)变量名,高----低
2.自动转换:低—高

注意点:
1.不能对布尔值进行转换;
2.不能把对象类型转化为不相同的类型;
3.在把高容量转化为低容量的时候,强制转换;
4.转换的时候可能存在内存溢出,或者精度问题。

示例:

public class Demo5{
	public static void main(String[] args){
		int i = 128;
		// byte b = i; 错误!!!由高到低需使用强制转换
		byte b = (byte)i; 
		// 强制转换 (类型)变量名
		double d = i; 
		// 由低到高,自动转换 ,d = 128.0
		
		char c ='a';
		int num = c + 1;
		System.out.printIn(num); 
		// 98 ,发生了自动转换
		System.out.printIn((char)num); 
		// b ,强制转换为字符型
		
	}
}

1.内存溢出

代码如下(示例):

public class Demo5{
	public static void main(String[] args){
		int i = 128;
		// byte b = i; 错误!!!由高到低需使用强制转换
		byte b = (byte)i; 
		// b = -128 
		// 由于 byte 类型的范围是 -128~127 ,因此转换时出现内存溢出现象
		}
	}

2.精度丢失

代码如下(示例):

public class Demo5{
	public static void main(String[] args){
	
		System.out.printIn(23.7); //23.7
		System.out.printIn((int)23.7); //23,出现精度丢失
		System.out.printIn((int)-45.89f); //-45,出现精度丢失
		

3.操作比较大的数时,注意溢出问题

代码如下(示例):

public class Demo6{
	public static void main(String[] args){
		int money = 10_0000_0000;
		//1000000000 JDK7新特性,数字之间用下划线分割
		int years = 20int total = years*money; // -1381738173 很小的负数,内存溢出
		long total2 = years*money;
		// 仍然是很小的负数,这是因为 years和money 都是int类型在转化为long类型之前就已经是很小的负数long total3 = years*(long)(money);
		// 200 0000 00000
	}
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

热带云朵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值