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
}
}
Java SE_数据类型转换
于 2021-03-29 21:04:04 首次发布
本文详细介绍了Java中的类型转换,包括自动转换和强制转换,以及转换过程中的溢出和精度问题。示例代码展示了从int到byte的强制转换导致的溢出现象,并解释了内存溢出的原因。此外,还讨论了在处理大数值时可能出现的溢出问题以及解决方案。
摘要由CSDN通过智能技术生成