02-数据类型

马铃薯1 / 2023-07-03 / 原文

数据类型

Java数据类型分为两大类,基本数据类型和引用类型。

每一种数据都定义了明确的数据类型,在内存中分配了不同大小的内存空间(字节)。

基本数据类型:byte[1]、short[2]、int[4]、long[8]、float[4]、double[8]、char[2]、boolean[1]。

引用类型:类(class)、接口(interface)、数组([])。

这里需要注意,String不属于八种基本数据类型,String是一个对象,实际上是通过使用字符数组来存储数据的。

1.基本数据类型

整数类型(byte、short、int、long)

Java的整数类型就是用于存放整数值的,比如5,10,15,20

a) Java各整数类型有固定的范围和字段长度,不受具体操作系统的影响,以保证Java程序的可移植性。
b) Java的整型常量默认为int型,声明long型常量,须后加“l”或"L"
c) Java程序中变量常声明为int型,除非不足以表示大数,才使用long型
d) bit:计算机中最小的存储单位。byte:计算机中基本存储单元。1byte = 8bit。

public class IntDetail{
    public static void main(String[] args){
        //Java的整型常量(具体值)默认为int型,声明long型常量,须后加“l”或"L"
        int n1 = 1;   //4个字节
        System.out.println("数据类型:"+getType(n1));

        //int n2 = 1L; (错误: 不兼容的类型: 从long转换到int可能会有损失)
        long n3 = 1L; //8个字节
        System.out.println("数据类型:"+getType(n3));

    }

    //获取变量类型方法
    public static String getType(Object o){ 
        //使用int类型的getClass()方法
        return o.getClass().toString(); 
    } 
}

浮点类型(float、double)

Java的浮点类型可以表示一个小数,比如3.14,12.56

a) 与整数类型类似,Java浮点类型也有固定的范围和字段长度,不受操作系统的影响,,以保证Java程序的可移植性。

b) Java的浮点型常量默认为double型,声明float型常量,须后加"f"或"F"

c) 浮点数在机器中的存放形式,浮点数 = 符号位 + 指数位 + 尾数位

符号位:判断当前数字是正数还是负数,0表示正数,1表示负数

指数位:float和double的范围是由指数的位数来决定的

尾数位:float和double的精度是由尾数的位数来决定的

d) 尾数部分可能丢失,造成精度损失(小数都是近似值)

单精度float:1bit符号位、8bit指数位、23bit尾数位

双精度double:1bit符号位、11bit指数位、52bit尾数位

public class FloatDetail{
    public static void main(String[] args){
        //Java的浮点型常量(具体值)默认为double型,声明float型常量,须后加"f"或"F"
        //float num1 = 1.1; (错误: 不兼容的类型: 从double转换到float可能会有损失)
        float num2 = 1.1F; //4个字节
        System.out.println("数据类型:"+getType(num2));

        double num3 = 1.1; //8个字节
        System.out.println("数据类型:"+getType(num3));

        double num4 = 1.1F; //这个可以编译通过,8个字节的变量可以存放四个字节的数据
        System.out.println("数据类型:"+getType(num4));

        //科学计数法
        System.out.println(5.12e2);  //5.12*10^2 = 512.0
        System.out.println(5.12E-2); //5.12*10^(-2) = 0.0512
    }

    //获取变量类型方法
    public static String getType(Object o){ 
        //使用int类型的getClass()方法
        return o.getClass().toString(); 
    } 
}