java基础之 类型转换

一、自动类型转换

1、java中不同类型的数据在计算时,为保证数据的精度,数据的类型会以大容量的类型为主;

2、自动类型转换的排序:

char、byte、short -> int -> long -> float -> double

3、字符串和任意类型的数据进行连接运算(+),都会自动转换为字符串;

4、赋值运算时常量可以进行自动类型转化,变量不可以,例如:

int a=1byte b=1;
System.out.println(a+b);

// 结果:2

byte a=1a=a+1;

//结果:java: 不兼容的类型: 从int转换到byte可能会有损失
//原因:byte 在进行计算时会自动转换为int类型,这时就会变成 byte=int+int int类型被要求转换为byte,导致产生上面的错误。

 5、在进行加运算的时候比int小的数据类型(char、byte、short)之间的运算都会自动转化成int的加运算,例如:

byte a = 1;  
byte b = 2;  
a = b + a;  
System.out.println("b="+a);   
// 结果:java: 不兼容的类型: 从int转换到byte可能会有损失
// 原因:b+a 数据类型自动转化为int了,不能赋值给byte类型的a

byte a = 1;
byte b = 2;
int c = b + a;
System.out.println(c);

// 结果:3

 

二、强制类型转换

1、将容量大的数据类型转换为容量小的数据类型,强制类型转换可能会造成精度的降低或者溢出;

2、强制类型转换符(),括号里为要强制转换为什么类型,例如:

double a = 1.91;
int b = (int) a;
System.out.println(b);

// 结果:1
// 这里的 a 被强制转换为int类型,小数点被强制去了

 

3、字符串不能直接转换为基本数据类型,但可以通过基本类型的封装类型进行转换,例如:

String s = "12";
int a = Integer.parseInt(s);
System.out.println(a);

//结果:12

 

4、boolean类型和字符串的类型转换;

//boolean 转 String
boolean f = true;
String s = f + "";
System.out.println(s);
//结果:true

//String 转 boolean
String s = "true";
boolean f = Boolean.parseBoolean(s);
System.out.println(f);
//结果:true

 

5、在继承中,子类可以自动转型为父类,但是父类强制转换为子类时只有当引用类型真正的身份为子类时才会强制转换成功,否则失败;

class Father {}
class Son extends Father {}

//Father 是 Son的父类
Father father = new Son();
Son son = (Son) father;

//father虽然是Father类型的数据,但是它指向的其实是 Son对象
//所以 (Son) father 是可行的


Father father1 = new Father();
Son son1 = (Son) father1;

//father指向的是 Father对象
//所以 (Son) father 是不可行的
//这将会报错 java.lang.ClassCastException

 

posted @ 2018-06-17 01:02  喵喵扑  阅读(282)  评论(0编辑  收藏  举报