02-数据类型-基本数据类型

数据类型

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

字符类型(char)

字符类型可以表示单个字符,字符类型是char,char是两个字节(可以存放汉字),多个字符用字符串String

a) 字符常量是用单引号('')括起来的单个字符,例如char c1 = 'a'; char c2 = '任';

b) Java中允许使用转义字符'\'来将其后的字符转变为特殊字符型常量,例如char c3 = '\n';

c) Java中,char的本质是一个整数,可以直接给char赋一个整数,在输出时会按照对应unicode码输出

d) char类型是可以进行运算的,相当于一个整数,因为都有其对应的unicode码

这里需要注意,定义一个char字符类型变量,一定要用单引号,而不是双引号。

public class CharDetail{
    public static void main(String[] args){
        //Java中,char的本质是一个整数,在默认输出时,会按照对应unicode码输出
        //输出对应的数字,可以(int)字符
        char c1 = 97;
        System.out.println("97对应的unicode码是:"+c1);//'a'

        //输出'a'所对应的unicode码值
        char c2 = 'a';
        System.out.println("'a'对应的unicode码值是:"+(int)c2);//97

        char c3 = '任';
        System.out.println("'任'对应的unicode码值是:"+(int)c3);//20219

        //char类型是可以进行运算的
        System.out.println('a'+10);//107,'a'所对应的unicode码值是97
        System.out.println("a"+10);//a10,当+号左右两边有一方为字符串,则做拼接运算
    }
}

布尔类型(boolean)

布尔类型也叫boolean类型,boolean类型数据只允许取值true和false,无null。

boolean类型适用于逻辑运算,一般用于程序流程控制。

这里需要注意,Java中不可以用0或非0的整数代替false和true,这点与C、Python语言不同。

public class Boolean01{
    public static void main(String[] args){
        //演示判断成绩是否通过的案例
        //定义一个布尔变量
        boolean isPass = true;
        
        if(isPass == true){
            System.out.println("考试通过,恭喜");
        }else{
            System.out.println("考试没有通过,下次努力");
        }
    }
}

基本数据类型转换(自动类型转换和强制类型转换)

1.自动类型转换

当Java程序在进行赋值或者运算时,精度小的类型自动转换为精度大的数据类型,这个就是自动类型转换。

这里需要注意,(byte,short)和char之间不会相互自动转换,但byte,short,char三者可以计算,在计算时首先转化为int类型。

public class AutoConvert{
    public static void main(String[] args){
        //演示自动类型转换,精度小的类型自动转换为精度大的数据类型
        int num = 'a';   //ok,int > char
        double d1 = 80; //ok,double > int

        //有多种类型的数据混合运算时,
        //系统首先自动将所有数据转换成精度大的数据类型,然后再进行计算
        int n1 = 10;
        //float d1 = n1 + 1.1; //错误,Java的浮点型常量默认为double型,n1 + 1.1 => 结果类型是double
        float d2 = n1 + 1.1F;  //ok,n1 + 1.1F => 结果类型是float
        double d3 = n1 + 1.1;  //ok,n1 + 1.1 => 结果类型是double

        //当我们把精度大的数据类型赋值给精度小的数据类型时,
        //就会报错,反之就会进行自动类型转换
        //int n2 = 1.1; //错误,int < double
        char c1 = 97;   //ok,虽然char < int ,但是当给char赋一个整数时,会转换为对应的unicode码

        //思考(如果是变量赋值,则需要判断类型,不需要考虑特殊情况)
        int n2 = 97;
        //char c2 = n2; //错误: 不兼容的类型: 从int转换到char可能会有损失
    }
}

2.强制类型转换

自动类型转换的逆过程,将精度大的数据类型转换为精度小的数据类型。使用时要加上强制转换符(),但可能造成精度降低或溢出,要格外注意。

这里需要注意,char类型可以保存int的常量值,但不能保存int的变量值,需要强制类型转换。

public class ForceConvert{
    public static void main(String[] args){
        //演示强制类型转换
        //需要强制类型转换,int < double
        int n1 = (int)1.9;
        System.out.println(n1); //1,造成精度损失

        //需要强制类型转换,byte < int
        int n2 = 2000;
        byte b1 = (byte)n2; 
        System.out.println(b1);//-48,造成数据溢出

        //char类型可以保存int的常量值,但不能保存int的变量值,需要强转
        char c1 = 97; 
        System.out.println(c1);//'a'

        int n3 = 98;
        char c2 = (char)n3;
        System.out.println(c2);//'b'
    }
}

基本数据类型和String类型的转换 

在程序开发过程中,我们经常需要将基本数据类型转成String类型,或者将String类型转成基本数据类型。

1.基本数据类型转String类型

语法:将基本数据类型的值+""即可

2.String类型转基本数据类型

语法:通过基本数据类型的包装类,调用parseXX方法即可

public class StringToBasic{
    public static void main(String[] args){
        //1.基本数据类型 -> String类型
        int n1 = 100;
        float f1 = 1.1F; 
        double d1 = 4.5;
        boolean b1 = true;
        char c1 = '男';

        String s1 = n1 + "";
        String s2 = f1 + "";
        String s3 = d1 + "";
        String s4 = b1 + "";
        String s5 = c1 + "";
        System.out.println(s1 + " " + s2 + " " + s3 + " " + s4 + " "); //100 1.1 4.5 true 

        //2.String类型 -> 基本数据类型
        s5 = "123";
        //String类型转int类型,调用Integer.parseInt(String s)方法,将字符串参数解析为带符号的十进制整数。
        int n2 = Integer.parseInt(s5);
        //String类型转double类型,调用Double.parseDouble(String s)方法,返回一个新double初始化为指定字符串表示的值
        double d2 = Double.parseDouble(s5);
        //String类型转float类型,调用Float.parseFloat(String s)方法,返回一个新float初始化为指定字符串表示的值
        float f2 = Float.parseFloat(s5);
        //String类型转char类型,调用getChar(0)方法将单个字符串转换为char
        //String 类提供 charAt() 从输入字符串中获取第 n 个字符(从 0 开始)作为 char
        char c2 = s5.charAt(0);

        System.out.println(n2 + " " + d2 + " " + f2 + " " + c2); //123 123.0 123.0 1

    }
}

注意:Java 各种数据类型的初始值(默认值)

1. 整形基本数据类型 byte  short int long ,默认值都为0

2. 浮点型基本数据类型 float double ,默认值为0.0

3. 字符基本数据类型 char ,默认值是 ''

4. 布尔基本数据类型 boolean ,默认值为false

5. String引用数据类型,默认值是null

也就是说在java中基本类型的默认值是0,引用类型会默认为null。

posted @ 2023-07-02 22:04  马铃薯1  阅读(38)  评论(0编辑  收藏  举报