JavaSE02-数据类型和类型转换


一、数据类型

Java属于强类型语言,要求变量的使用要严格符合规定,所以变量都必须先定义后才能使用

Java的数据类型分为两大类:

  1. 基本类型 primitive type(8)
  • 数值类型(7)

    • 整数类型(4)
      • byte 1个字节,范围:-128~127
      • short 2个字节,范围:-32768~32767
      • int 4个字节,最常用。
      • long 8个字节,long num=30L;后缀要加L。
      • 整数类型进行运算时,如果存在long类型的数据,结果将为long类型,否则结果都将为int类型。
    • 浮点类型(2)
      • float 4个字节,float num=30.1F; 后缀要加F。
      • double 8个字节,最常用。
    • 字符类型(1)所有的字符本质还是数值
      • char 2个字节(String 不是关键字,是一个类)
  • 布尔类型(1)

    • boolean 1位,true or false
  • 扩展

    • 整数扩展:进制

              // 整数拓展:进制表示
              int i1 = 10;    // 十进制   10
              int i2 = 0b10;  // 二进制   2
              int i3 = 010;   // 八进制   8
              int i4 = 0x10;  // 十六进制 16
      
    • 浮点数扩展:尽量避免用浮点数进行比较

      • 浮点数是有限的,离散的,存在舍入误差
      • BigDecimal 数学工具类
  • 代码实现

        public class DataTypes {
            public static void main(String[] args) {
                // 八大基本数据类型
        
                // 整数
                byte num1 = 10;
                short num2 = 20;
                int num3 = 30;  //最常用
                long num4 = 40L;  // Long类型要在数字后面加一个L
        
                // 浮点数
                float num5 = 10.1F;  // Float类型要在数字后面加一个F
                double num6 = 10.1;  // 最常用,浮点数默认类型
        
                // 字符类型
                char c = '中';
                // String str = "中国";
                // String不是关键字,是一个类
        
                // 布尔值
                boolean flag1 = true;
                boolean flag2 = false;
            }
        }
    
  1. 引用类型 reference type
  • 数组
  • 接口

二、类型转换

运算时,不同类型的数据需要先转换为同一类型,然后进行计算。

  1. 自动类型转换(低 —> 高)

    // 自动类型转换(低-->高)
    byte num1 = 123;
    int num2 = num1;
    System.out.println(num1);  // 123
    System.out.println(num2);  // 123
    
  2. 强制类型转换(高 —> 低)

    // 强制类型转换(高-->低)
    int num3 = 123;
    byte num4 = (byte) num3;
    System.out.println(num3);  // 123
    System.out.println(num4);  // 123
    

注意:

  1. 不能对布尔值进行转换

  2. 不能把对象类型转换为不相关的类型

  3. 高容量转低容量,要强制类型转换

  4. 转换时可能存在内存溢出,或者精度问题

    //内存溢出(操作数比较大时要特别注意)
    int num5 = 128;
    byte num6 = (byte)num5;
    System.out.println(num5);  //128
    System.out.println(num6);  //-128
    
    //精度问题
    System.out.println((int)12.3);  //12
    System.out.println((int)-12.3f);  //-12