转载自 :https://dunwu.github.io/javacore/basics/java-data-type.html
- 4.1. 包装类的判等
- 4.2. String 的判等
- 4.3. 实现 equals
- 4.4. hashCode 和 equals 要配对实现
- 4.5. compareTo 和 equals 的逻辑一致性
- 4.6. 小心 Lombok 生成代码的“坑”
# 1. 数据类型分类
Java 中的数据类型有两类:
- 值类型(又叫内置数据类型,基本数据类型)
引用类型(除值类型以外,都是引用类型,包括 String
、数组)
# 1.1. 值类型
Java 语言提供了 8 种基本类型,大致分为 4 类
基本数据类型 | 分类 | 比特数 | 默认值 | 取值范围 | 说明 |
---|---|---|---|---|---|
boolean |
布尔型 | 8 位 | false |
{false, true} | |
char |
字符型 | 16 位 | '\u0000' |
[0, $2^{16} - 1$] | 存储 Unicode 码,用单引号赋值 |
byte |
整数型 | 8 位 | 0 |
[-$2^7$, $2^7 - 1$] | |
short |
整数型 | 16 位 | 0 |
[-$2^{15}$, $2^{15} - 1$] | |
int |
整数型 | 32 位 | 0 |
[-$2^{31}$, $2^{31} - 1$] | |
long |
整数型 | 64 位 | 0L |
[-$2^{63}$, $2^{63} - 1$] | 赋值时一般在数字后加上 l 或 L |
float |
浮点型 | 32 位 | +0.0F |
[$2^{-149}$, $2^{128} - 1$] | 赋值时必须在数字后加上 f 或 F |
double |
浮点型 | 64 位 | +0.0D |
[$2^{-1074}$, $2^{1024} - 1$] | 赋值时一般在数字后加 d 或 D |
尽管各种数据类型的默认值看起来不一样,但在内存中都是 0。
在这些基本类型中,boolean
和 char
是唯二的无符号类型。
# 1.2. 值类型和引用类型的区别
- 从概念方面来说
- 基本类型:变量名指向具体的数值。
- 引用类型:变量名指向存数据对象的内存地址。
从内存方面来说
- 基本类型:变量在声明之后,Java 就会立刻分配给他内存空间。
- 引用类型:它以特殊的方式(类似 C 指针)向对象实体(具体的值),这类变量声明时不会分配内存,只是存储了一个内存地址。
从使用方面来说
- 基本类型:使用时需要赋具体值,判断时使用
==
号。 - 引用类型:使用时可以赋 null,判断时使用
equals
方法。