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 大的向小的转换时,需要强制类型转换,就是(目标类型)。
 

 
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);

 
知识点:
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即是符号位,也是数值位)

 
 
posted on 2018-04-01 18:20  荆棘Study  阅读(121)  评论(0编辑  收藏  举报