您的位置:首页 > 编程语言 > Java开发

Core Java (十五) Java中的类型转换

2013-01-23 17:17 225 查看

自动类型转换

在运行程序的时候,经常需要类型转换,Java会在以下情况下,自动做数据类型的转换。

转换前的数据类型与转换后的类型兼容。
转换后的数据类型的表示范围比转换前的类型大。

在可以转换的前提下,a->b,即使b的表示范围大于a的表示范围,但如果b的精度不够,则最终的结果会丧失一些精度。
以下转换不会丧失精度:

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");
	}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: