Java面试题 — Java中的数据类型有哪些?分为哪两大类?

0 阅读4分钟

Author : Cyan_RA9
Source : 【卡码笔记】网站
Question : Java中的数据类型有哪些?分为哪两大类?

【简要回答】

  • 分类:基本数据类型 和 引用数据类型。

    1. 基本数据类型分类:Java中一共有八种基本数据类型。
      整数型:byte, short, int, long;
      浮点型:float(单精度), double(双精度);(整数型和浮点型又统称为“数值类型”)
      字符型:char;
      布尔型:即布尔类型boolean。
    2. 引用数据类型分类:Java中一共有三种引用数据类型。
      类(Class)(String类型就属于这块儿);
      接口(Interface)
      数组
  • 示例

    // 基本数据类型示例
    int num = 10;
    double price = 19.99;
    char letter = 'A';
    boolean flag = true;
    
    // 引用数据类型示例
    String name = "Cyan_RA9";
    int[] numbers = {1, 2, 3};
    

【详细回答】

  • Java中的数据类型分为两大类:基本数据类型(Primitive Data Types)引用数据类型(Reference Data Types)

  • 基本数据类型:Java提供了八种基本数据类型,基本数据类型直接存储值而不是指向对象的引用。具体来说,Java中的八种基本数据类型又可以分为四小类:

    1. 整数型
      ① byte: 占用1字节(8位),范围为-128到127。
      ② short: 占用2字节(16位),范围为-32,768到32,767。
      ③ int: 占用4字节(32位),范围为约-2^31到2^31-1。
      ④ long: 占用8字节(64位),范围为约-2^63到2^63-1。
    2. 浮点型
      ① float: 单精度浮点数,占用4字节,适用于需要高速度但对精度要求不高的场景。
      ② double: 双精度浮点数,占用8字节;浮点数尽量用 double 类型存储,而不是 float,因为 double 能有效减少因精度不足导致的累积误差。
    3. 字符型
      ① char: 占用2字节(16位),用于表示单个字符,采用Unicode编码。
    4. 布尔型
      ①boolean: 表示逻辑值true或false。虽然没有明确指定其大小,但在实践中通常占用1位。
  • 引用数据类型:引用数据类型存储的是内存地址,这些地址指向实际的对象或者实例。

    1. 类(Class):类,它是创建对象的模板,如String类。
    2. 接口(Interface):接口中定义了一组方法,但未实现它们。具体实现由接口的实现类提供。
    3. 数组:数组是一种特殊的数据结构,可以存储固定数量的相同类型的元素。数组既可以是一维的也可以是多维的(但实际内存中只有一维数组)。
    4. 枚举(Enum):枚举允许一组固定的常量定义在一个类型内,它实际上也是一种特殊的类
  • 代码演示

    // 基本数据类型示例
    int num = 10;
    double price = 19.99;
    char letter = 'A';
    boolean flag = true;
    
    // 引用数据类型示例
    String name = "Cyan_RA9";
    int[] numbers = {1, 2, 3};
    

【知识拓展】

  • Java的八种基本数据类型所占字节和表示范围,如下图所示: eight_basic_DS_info.jpg
  • Java中的数据类型转换:
    1. 自动(隐式)类型转换:“小类型 → 大类型”,自动提升为大类型,运算结果也是大类型。
    2. 强制(显式)类型转换:“大类型 → 小类型”,手动将大类型转换成小类型,运算结果是小类型;转换格式——“小类型 变量名 = (小类型) 大类型数据;”。注意:当且仅当大类型数据可以转换为小类型数据时,才能进行强制类型转换,否则会造成精度丢失。
  • 补充
    1. int 转 float 虽然是小类型转大类型,但可能丢失精度,因为根据IEEE754标准, float 的尾数部分只有 24 位有效位(含1位隐藏位),而 int 需要 32 位表示。如果需要更高的精度,可以使用 double 类型(64 位浮点数,尾数部分有 53 位有效位),但即便如此,double 也无法精确表示所有 long 类型的值
    2. byte,short 和 char之间 不会发生 相互自动转换。
    3. byte, short, char参与运算时,结果自动转换为int类型
    4. 当把数值类变量赋值给byte时,先判断该数是否在byte范围内,是就可以赋值。
    5. 在Java中,boolean类型不参与数据类型转换。
    6. “表达式” 结果的类型自动提升为所操作的数据中最大的类型。
  • 对于boolean类型,不可以用0 或 非0来代替false 和 true(与C语言不同),即boolean类型的取值范围只能是true 和 false。