JAVA范例转换怎么变
范例转换范例转换是将一个值从一种范例更改为另一种范例的过程。比方, 可以将String范例的数据“457”转换为数值型,也可以将恣意范例的 数据转换为String范例。 如果从低精度数据范例向高精度数据范例转换,则永远不会溢出, 并且总是成功的;而把高精度数据范例向低精度数据范例转换时,则会 有信息丢失,有可能失败。 数据范例转换有两种方式,即隐式转换与显式转换。
隐式范例转换
从低级范例向高级范例的转换,系统将主动执行,程序员无须进行任何操作。这种范例的转换称为隐式转换。下列根本数据范例会涉及数 据转换,不包括逻辑范例和字符范例。这些范例按精度从低到高排列的 顺序为byte < short < int < long < float < double。
int x = 5;
float y = x; // y = 5.0隐式转换也要遵照一定的规则,来解决在什么情况下将哪种范例的 数据转换成另一种范例的数据。表列出了各种数据范例隐式转换的 一般规则。
https://img2023.cnblogs.com/blog/2862884/202409/2862884-20240923105217107-1910820524.png
编译阶段
在编译阶段,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));https://img2023.cnblogs.com/blog/2862884/202409/2862884-20240923105216301-782740175.png
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)129https://img2023.cnblogs.com/blog/2862884/202409/2862884-20240923105215666-1151415600.png
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()方法。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]