Java类型转换
Java中的自动类型转换:
自动类型转换:容量小的类型自动转换为容量大的数据类型。数据类型按容量大小排序为:
1 有多种类型的数据混合运算时,系统首先自动将所有数据转换成容量最大的那种数据类型,然后再进行计算
2 byte,short,char之间不会相互转换,他们三者(或自身)在计算时首先转换为int类型。
3 当把任何基本类型的值和字符串值进行连接运算时(+),基本类型的值将自动转化为字符串类型。
public static void main(String[] args) { byte b1 = 10; short s1 = 12; int i1 = b1+s1; System.out.println(i1); //22 char c1 = '0'; //48,'a'97,'A'65, int i2 = i1+c1; System.out.println(i2); //70 float f1 = 12.4F; float f2 = f1+i2; System.out.println(f2); //82.4 long l1 = 345L; float f3 = f2+l1; System.out.println(f3); //427.4 double d2 = l1; System.out.println(d2); //345.0 double d1 = f1+1.25; System.out.println(d1); //13.649999618530273 // System.err.println(d1); } |
当然自动类型转换是需要满足特定的条件的:
1. 目标类型能与源类型兼容,如 double 型兼容 int 型,但是 char 型不能兼容 int 型
2. 目标类型大于源类型,如 double 类型长度为 8 字节, int 类型为 4 字节,因此 double 类型的变量里直接可以存放 int 类型的数据,但反过来就不可以了
Java中的强制类型转换:
目标类型小于源类型时,需要进行强制转换;例如:当程序中需要将 double 型变量的值赋给一个 int 型变量,该如何实现呢?
显然,这种转换是不会自动进行的!因为 int 型的存储范围比 double 型的小。此时就需要通过强制类型转换来实现了。
语法:( 数据类型 ) 数值
运行结果:
可以看到,通过强制类型转换将 75.8 赋值给 int 型变量后,结果为 75,数值上并未进行四舍五入,而是直接将小数位截断。强制类型转换可能会造成数据的丢失哦,小伙伴们在应用时一定要慎重哦!
基本类型的类型转换:
1 布尔类型不参与类型转换。常数可以自动类型转换。
2 自动转换发生在小的表述范围到大的表述范围。:
进行混合运算的时候,byte,short,char不会相互转换,都会自动类型提升为int类型,其他类型进行混合运算的是小的数据类型提升为大的
byte-> short / char -> int -> long -> float -> double (float表示的数据范围比long的范围要大)
3 大的向小的转换时,需要强制类型转换,就是(目标类型)。
1 布尔类型不参与类型转换。常数可以自动类型转换。
2 自动转换发生在小的表述范围到大的表述范围。:
进行混合运算的时候,byte,short,char不会相互转换,都会自动类型提升为int类型,其他类型进行混合运算的是小的数据类型提升为大的
byte-> short / char -> int -> long -> float -> double (float表示的数据范围比long的范围要大)
3 大的向小的转换时,需要强制类型转换,就是(目标类型)。
String/Date类型之间的转换:
这种转换要用到java.text.SimpleDateFormat类
1.1字符串转换成日期类型:
方法1:
也是最简单的方法 Date date=new Date("2008-04-14");
方法2:
DateFormat fmt =new SimpleDateFormat("yyyy-MM-dd");
String dstr="2008-4-24";
java.util.Date date=fmt.parse(dstr);
1.2日期转换成字符串:
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
java.util.Date date=new java.util.Date();
String str=sdf.format(date);
这种转换要用到java.text.SimpleDateFormat类
1.1字符串转换成日期类型:
方法1:
也是最简单的方法 Date date=new Date("2008-04-14");
方法2:
DateFormat fmt =new SimpleDateFormat("yyyy-MM-dd");
String dstr="2008-4-24";
java.util.Date date=fmt.parse(dstr);
1.2日期转换成字符串:
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
java.util.Date date=new java.util.Date();
String str=sdf.format(date);
知识点:
String类型的转译:"你好\"帅\"的";
byte值的问题(byte占一个字节,需要截取二进制)
byte b1 = 127;
byte b2 = (byte)128; //-128
byte b3 = (byte)129; //-127
byte b4 = (byte)130; //-126
byte的范围:-128 ~ 127
128:10000000
-128:10000000 (这里的1即是符号位,也是数值位)