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"); } }
相关文章推荐
- Core Java 学习笔记——2.基本数据类型&类型转换
- CoreJava——java中的基本数据类型和类型转换
- Java基本类型转换
- 【JAVA基础回顾】数据类型转换与字节位
- Java 基本数据类型转换
- java中String,int,Integer,char,Long,Float,Double,Date 类型转换
- 【java】 基本数据类型之间的转换
- JAVA中int、String的类型转换
- JAVA中int、String的类型转换
- Java 类型转换
- JAVA中int、String的类型转换
- Java中常见基本类型之间的转换
- Java 中基本类型和字符串之间的转换
- 数据类型自动转换(Java)
- 把一个字符串转换成int类型(Java实现)
- Java的基本数据类型之间的转换以及面试题
- Core Java (二十五) List与Array的相互转化,Set与Array的相互转换
- Java Swing中读取/写入图片到MySQL中类型转换
- JAVA菜鸟入门篇 - 数据类型转换、运算符(四)
- java避开基本数据类型转换列表陷阱