基本数据类型
- 数值类型(整数、小数):
byte 1个字节(8位-----二进制数 0000 0000) 整型
short 2个字节(16位) 整型
int 4个字节(32位) 整型
long 8个字节(64位) 整型
float 4个字节(32位) 单精度 浮点型
double 8个字节(64位) 双精度 浮点型 - 非数值类型(文本)
char 2个字节(16位) 表示字符(字符型)
boolean 1/8个字节(1位二进制数) 判断逻辑是否成立 true(1)/false(0) 布尔型
引用类型
- String
- 数组[]
- 类class(抽象类 abstract class)
- 接口(interface)
- 枚举(enum)
- 注解(@interface)
- …
除了基本类型以为,其余都可称之为引用类型
数据类型转换
- 同种数据类型之间可以直接进行赋值操作
int a=1;int b=a
float x=3.4;float y=x;
- 数据类型不同的空间之间的转换问题
基本类型与基本类型之间,可以直接转换(自动和强制)
引用类型与引用类型之间,可以直接转换(自动和强制–上转型和下转型)
基本数据类型和引用数据类型之间,不可以直接转换,需要间接转换(包装类/封装类–也是引用类型) - 自动转化(数据类型相同时,例如都是整型)
规则:一般来说由低字节向高字节转换,但是任何浮点型都可以直接存放整型,因为浮点型精确度更高
byte a=1;
int b=a;
long i=130l;
float b=i;
System.out.println(b);
注意:int和float虽然都为4个字节,但是float类型转换为int类型不能自动转换,而int类型转换为float类型可以自动转换,这就涉及到精度问题,float类型比int类型更准确,可以描述小数,因此只能从int类型转换为float类型
int a=1;
float b=a;
- 强制转化(数据类型属于同一类时,例如整型和浮点型)
高字节向低字节转换
double d=1.0;
int i=(int) d;
注意:字符型可以和整型或浮点型强制转换,由于每一个字符都对应有一个Unicode码
double d=1.0;
int i=1;
char c=(char) d;
char cc=(char)i;
当强制转换的数值比当前类型的最值范围还要大时,会造成变量空间无法存储转换后的数值,则执行后的结果会发生变化
int i=130;
byte b=(byte) i;
System.out.println(b);
引用类型之间的转换问题
- 多态
概念:同一个对象体现出多种不同的形态(身份),将一种行为表现出不同的效果
如何形成:要想实现多态效果,需要有继承或实现接口关系
示例体现:
public class Person {
//父类Person
}
public class Teacher extends Person{
//子类Teacher 继承父类
}
//测试类
public class TestMain {
public static void main(String[] args) {
//该子类的引用类型自动转化为父类的引用类型(自动转化)----向上转型
Person person = new Teacher();
}
}
public class TestMain {
public static void main(String[] args) {
Person person = new Person();
//父类的引用强制转化为子类类型(向下转型)
Teacher teacher = (Teacher) person;
}
}
总结:一般来说,强制类型转换可能会造成精度缺失
有关更多的多态知识,将在多态章节讲解清楚