java数据类型及类型转换

基本数据类型

  • 数值类型(整数、小数):
    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;
    }
}

总结:一般来说,强制类型转换可能会造成精度缺失

有关更多的多态知识,将在多态章节讲解清楚

猜你喜欢

转载自blog.csdn.net/weixin_45608165/article/details/112212300