JAVA类型转换怎么变
类型转换
类型转换是将一个值从一种类型更改为另一种类型的过程。例如, 可以将String类型的数据“457”转换为数值型,也可以将任意类型的 数据转换为String类型。 如果从低精度数据类型向高精度数据类型转换,则永远不会溢出, 并且总是成功的;而把高精度数据类型向低精度数据类型转换时,则会 有信息丢失,有可能失败。 数据类型转换有两种方式,即隐式转换与显式转换。
隐式类型转换
从低级类型向高级类型的转换,系统将自动执行,程序员无须进行任何操作。这种类型的转换称为隐式转换。下列基本数据类型会涉及数 据转换,不包括逻辑类型和字符类型。这些类型按精度从低到高排列的 顺序为byte < short < int < long < float < double。
int x = 5;
float y = x; // y = 5.0
隐式转换也要遵循一定的规则,来解决在什么情况下将哪种类型的 数据转换成另一种类型的数据。表列出了各种数据类型隐式转换的 一般规则。

编译阶段
在编译阶段,Java 编译器会检查 x 的类型,并且知道它是一个 int 类型的值。由于 float 类型可以表示比 int 类型更大的范围,并且 float 类型具有更高的精度,所以编译器允许这种类型的转换而不需要显式的类型转换操作符。
运行阶段
在运行时,当这段代码被执行时,JVM 会将 int 类型的值转换为 float 类型。具体来说,这涉及到将 int 类型的 32 位整数值转换为 float 类型的 32 位单精度浮点数格式。
这个转换实际上是通过将整数值编码为一个特殊的浮点数来完成的,其中整数被视为一个十进制数,并且没有小数部分。这意味着,对于任何整数值,只要它在 float 类型可表示的范围内(即不超出 float 类型的最大值),这个转换就是精确无误的。
内存布局
在内存中,x 是一个 32 位的整数,而 y 是一个同样占据 32 位但按照 IEEE 754 标准存储的浮点数。当 x 的值被复制到 y 时,实际上发生了以下步骤:
- 读取
x的值。 - 将这个整数值解释为一个浮点数,这意味着创建一个浮点数的内部表示形式,包括符号位、指数和尾数部分。
- 将转换后的值存储到
y中。
由于 int 和 float 都是 32 位宽,因此这个转换不会涉及额外的数据扩展或压缩。但是需要注意的是,尽管 5 作为一个整数可以直接转换为 5.0f 并且不会丢失任何信息,但对于某些其他的 int 值,转换到 float 可能会导致精度上的损失。
byte mybyte =127;//定义 byte 型变量 mybyte,并把允许的最大值赋给 mybyte
int myint = 150; //定义int型变量 myint,并赋值 150
float myfloat = 452.12f;//定义 float 型变量 myfloat,并赋值
char mychar = 10;//定义 char型变量 mychar,并赋值
double mydouble =45.46546;//定义 double 型变量,并赋值
//将运算结果输出
System.out.println("byte 型与 float 型数据进行运算结果为:"+(mybyte+ myfloat));
System.out.println("byte 型与int型数据进行运算结果为:"+mybyte*myint);
System.out.println("byte 型与 char 型数据进行运算结果为:"+mybyte/mychar);
System.out.println("double 型与 char 型数据进行运算结果为:"+(mydouble +mychar));

mybyte是一个byte类型的值,而myfloat是一个float类型的值。由于float类型的范围和精度都大于byte类型,因此byte类型的值会被提升为float类型,然后进行加法运算。最终的结果是一个float类型的值。
mybyte是一个byte类型的值,而myint是一个int类型的值。byte类型的值会被提升为int类型,然后与int类型的值进行乘法运算。最终的结果是一个int类型的值。
mybyte是一个byte类型的值,而mychar是一个char类型的值。char类型本质上是一个int类型的值(16 位),因此byte类型的值会被提升为int类型,然后进行除法运算。最终的结果是一个int类型的值。
mydouble是一个double类型的值,而mychar是一个char类型的值。char类型的值会被提升为int类型,然后int类型的值会被进一步提升为double类型,因为double类型的范围和精度都大于int类型。最后,两个double类型的值进行加法运算,得到的结果也是一个double类型的值。
显示类型转换
当把高精度的变量的值赋给低精度的变量时,必须使用显式类型转 换运算(又称强制类型转换)。
执行显式类型转换时,可能会导致精度损失。除boolean类型外, 其他基本类型都能以显式类型转换的方法实现转换。
当把整数赋值给一个byte、short、int、long型变量时,不可以 超出这些变量的取值范围,否则必须进行强制类型转换。例如: byte b = (byte)129
int num = 10;
System.out.println("整数值为: " + num);
//将int转换为字符串类型
String data = String.valueOf(num);
System.out.println("字符串值为: " + data);
在这里,我们使用了Java String类的valueOf()方法将int类型变量转换为字符串。
int a =(int)45.23; //45
long y=(long)456.6F; //456
int b = (int)'d'; //100
在浮点数向整数型转换的过程中,小数部分被丢弃了,因为 int 类型只能存储整数部分。这个过程是不可逆的,数据丢失是强制转换的常见问题。表达式强制转换,记得给表达式也加上括号,否侧计算机就会认为先强制转换d,再和a相加。
double d = 9.99;
double a = 7.99;
int i = (int)(d + a); // 强制将表达式转换为 int
System.out.println(i); // 输出17
System.out.println((int)d+a); // 输出 16.99
四舍五入可以使用Math.round()方法。
本文来自博客园,作者:ivanlee717,转载请注明原文链接:https://www.cnblogs.com/ivanlee717/p/18426617

浙公网安备 33010602011771号