概述
自动类型转换
在运行程序的时候,经常需要类型转换,Java会在以下情况下,自动做数据类型的转换。
- 转换前的数据类型与转换后的类型兼容。
- 转换后的数据类型的表示范围比转换前的类型大。
以下转换不会丧失精度:
byte->short
short->int
char->int
int->long
int->double
float->double
而以下可能会有精度损失:
int->float
long->float
long->double
总之,int->long->float->double,即向上转型,java会默认成功,不过可能会有精度的丢失;但是向下转型,要进行强制转换,而且还会有精度的丢失。
当不同数据类型的两个数进行运算的时候,可能会发生自动的类型转换,将两个数都转换成相同的类型,然后再进行运算。需要注意的是,这种转换不会对运算的两个数的类型产生影响。如下例中,int类型的i与float类型的f进行加法运算,首先,i会转换成float类型,与f相加得到一个float类型的结果,然后再转换成double类型,赋给d。赋值结束后i与f的数据类型不会改变。
若是整数的类型为short或byte,为了避免溢出,Java会将表达式中的short和byte类型自动转换成int类型,即可保证其运算结果的正确性,这也是Java所提供的“扩大转换”功能。如下例中,byte类型的a和b进行运算,Java会将其统统转换成int类型再进行运算,如果赋值给byte c 将会引起编译错误。
要注意的是,当相同数据类型的数进行运算的时候,赋值的类型不足以表示得数,不会发生自动的类型转换,比如两个int类型的数相加,得数用int不足以表示,那么就会发生编译错误。
package com.xujin;
public class Test{
public static void main(String...arg){
int i = 2000;
float f = 200f;
double d = i + f;
System.out.println(d);
byte a = 10;
byte b = 90;
//byte c = a + b;//Type mismatch: cannot convert from int to byte
int c = a + b;
System.out.println(c);
//int e = 2147483648;//The literal 2147483648 of type int is out of
}
}
强制类型转换
语法如下:
package com.xujin;
public class Test{
public static void main(String...arg){
double x = -9.99;
int y = (int)x;//-9,直接砍掉小数
int z = (int)Math.round(x);//-10,得到的是最接近的整数
System.out.println(y);
System.out.println(z);
}
}
重载时的自动类型转换
在函数重载的时候,也会出现自动类型转换的情况。
比如,有这个方法method(long a, float b),当调用method(10, 10)而没有method(int a, int b)的时候,整型10会自动转换成long类型。实现函数的重载。Java在选择重载函数的时候会调用最匹配的方法。
如下例:
10会首先转换成long类型,只有遇到强制转换的时候或者说方法里面只有method(floata, float b)才转换成float类型。
package com.xujin;
public class Test{
public static void main(String...arg){
Test test = new Test();
test.med(10, 10);//2
test.med(10, (float)10);//3
test.med((float)10, 10);//1
}
public void med(float a, long b){
System.out.println("1");
}
public void med(long a, long b){
System.out.println("2");
}
public void med(long a, float b){
System.out.println("3");
}
}
最后
以上就是笑点低帆布鞋为你收集整理的Core Java (十五) Java中的类型转换的全部内容,希望文章能够帮你解决Core Java (十五) Java中的类型转换所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复