Java SE_数据类型转换

本文详细介绍了Java中的类型转换,包括自动转换和强制转换,以及转换过程中的溢出和精度问题。示例代码展示了从int到byte的强制转换导致的溢出现象,并解释了内存溢出的原因。此外,还讨论了在处理大数值时可能出现的溢出问题以及解决方案。
摘要由CSDN通过智能技术生成
package com.landray.sty;

public class Demo02 {
	public static void main(String[] args) {
		/*
		 * 由于Java是强类型语言,所以在进行运算的时候,需要用到类型转换。
		 * 
		 * 低--------------------------------------------->高 
		 * byte,short,char -> int -> long(64) -> float(32) -> double 
		 * 从低到高指的是容量既字节大小
		 * 为什么float为32,long为64,但是float却比long的级别要高 
		 * 那是因为小数的优先级一定大于整数
		 * 
		 * 运算中,不同类型的数据先转化为同一类型,然后进行运算。
		 */

		int i = 128;
		byte b = (byte) i;// 强制转换
		System.out.println(i);// 输出128
		System.out.println(b);// 输出-128
		/*
		 * 为什么转换成byte类型后输出的值出现了问题? 查看Byte类型中的说明,发现MAX_VALUE = 127(最大值为127)
		 * 但是在这里给赋值了128,就产生了“内存溢出”的问题,所以值才会出现超出预期的结果。
		 */

		/*
		 * 强制转换: 
		 * 格式为:(类型)变量名 
		 * 等级是从高等级到低等级(既从高等级转换到低级等的时候需要强制转换)
		 * 
		 * 自动转换 : 
		 * 从低等级转换到高等级的时候,会自动转换。 
		 * 低级 - 高级
		 */

		int i1 = 128;
		double b1 = i1;// 自动转换
		System.out.println(i1);// 输出128
		System.out.println(b1);// 输出128.0

		/*
		 * 注意点:
		 * 1.不能对布尔值进行转换 
		 * 2.不能把对象类型转换成不相干的类型 
		 * 3.在把高容量转换到低容量的时候,强制转换;在把低容量转换高容量的时候会自动转换
		 * 4.转换的时候可能存在内存溢出,或者精度问题
		 */

		System.err.println((int) 23.7);// 输出23(double转int-高转低)
		System.err.println((int) -45.89f);// 输出-45(float转int-高转低)

		char c = 'a';
		int d = c + 1;
		System.out.println(d);// 输出98
		System.out.println((char) d);// 输出b

		// 操作比较大的数的时候,注意溢出问题
		// JDK7新特性,数字之间可以用下划线分割(并不会被输出)
		int money = 10_0000_0000;
		int years = 20;
		int total = money * years;// 用int类型接收值(出现内存溢出的问题)
		long total2 = money * years;// 尝试用long类型去接收(也会出现内存溢出的问题)
		// 输出 -1474836480,计算的时候内存溢出了
		System.out.println(total);
		// 输出-1474836480,为什么用long接收也出现了内存溢出问题,原因是变量计算后的结果默认类型是int,在转换之前就已经存在问题了
		System.out.println(total2);
		// 运算中,不同类型的数据先转化为同一类型,然后进行运算。
		long total3 = money * ((long) years);// 先把一个数转换为long,再进行运算。
		System.out.println(total3);// 输出20000000000

	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值