Author : Cyan_RA9
Source : 【卡码笔记】网站
Question : Java中的数据类型有哪些?分为哪两大类?
【简要回答】
-
分类:基本数据类型 和 引用数据类型。
- 基本数据类型分类:Java中一共有八种基本数据类型。
① 整数型:byte, short, int, long;
② 浮点型:float(单精度), double(双精度);(整数型和浮点型又统称为“数值类型”)
③ 字符型:char;
④ 布尔型:即布尔类型boolean。 - 引用数据类型分类:Java中一共有三种引用数据类型。
① 类(Class)(String类型就属于这块儿);
② 接口(Interface);
③ 数组。
- 基本数据类型分类:Java中一共有八种基本数据类型。
-
示例:
// 基本数据类型示例 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中的八种基本数据类型又可以分为四小类:
- 整数型:
① 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。 - 浮点型:
① float: 单精度浮点数,占用4字节,适用于需要高速度但对精度要求不高的场景。
② double: 双精度浮点数,占用8字节;浮点数尽量用 double 类型存储,而不是 float,因为 double 能有效减少因精度不足导致的累积误差。 - 字符型:
① char: 占用2字节(16位),用于表示单个字符,采用Unicode编码。 - 布尔型:
①boolean: 表示逻辑值true或false。虽然没有明确指定其大小,但在实践中通常占用1位。
- 整数型:
-
引用数据类型:引用数据类型存储的是内存地址,这些地址指向实际的对象或者实例。
- 类(Class):类,它是创建对象的模板,如String类。
- 接口(Interface):接口中定义了一组方法,但未实现它们。具体实现由接口的实现类提供。
- 数组:数组是一种特殊的数据结构,可以存储固定数量的相同类型的元素。数组既可以是一维的也可以是多维的(但实际内存中只有一维数组)。
- 枚举(Enum):枚举允许一组固定的常量定义在一个类型内,它实际上也是一种特殊的类。
-
代码演示:
// 基本数据类型示例 int num = 10; double price = 19.99; char letter = 'A'; boolean flag = true; // 引用数据类型示例 String name = "Cyan_RA9"; int[] numbers = {1, 2, 3};
【知识拓展】
- Java的八种基本数据类型所占字节和表示范围,如下图所示:
- Java中的数据类型转换:
- 自动(隐式)类型转换:“小类型 → 大类型”,自动提升为大类型,运算结果也是大类型。
- 强制(显式)类型转换:“大类型 → 小类型”,手动将大类型转换成小类型,运算结果是小类型;转换格式——“小类型 变量名 = (小类型) 大类型数据;”。注意:当且仅当大类型数据可以转换为小类型数据时,才能进行强制类型转换,否则会造成精度丢失。
- 补充:
- int 转 float 虽然是小类型转大类型,但可能丢失精度,因为根据IEEE754标准, float 的尾数部分只有 24 位有效位(含1位隐藏位),而 int 需要 32 位表示。如果需要更高的精度,可以使用 double 类型(64 位浮点数,尾数部分有 53 位有效位),但即便如此,double 也无法精确表示所有 long 类型的值。
- byte,short 和 char之间 不会发生 相互自动转换。
- byte, short, char参与运算时,结果自动转换为int类型。
- 当把数值类变量赋值给byte时,先判断该数是否在byte范围内,是就可以赋值。
- 在Java中,boolean类型不参与数据类型转换。
- “表达式” 结果的类型自动提升为所操作的数据中最大的类型。
- 对于boolean类型,不可以用0 或 非0来代替false 和 true(与C语言不同),即boolean类型的取值范围只能是true 和 false。