Files
notes/resource/java/Java基础.md
T
2026-03-01 01:43:46 +08:00

54 lines
4.1 KiB
Markdown

Java 是基于 Smalltalk 语言开发
# 基本数据类型
一般会学到 Java 中的基本数据类型为四类八种,On Java 中有 9 中基本数据类型的说法,加入了 void。
| 分类 | 基本类型 | 大小 | 最小值 | 最大值 | 包装类 |
| ---- | ------- | -------- | -------------------------- | ------------------------- | --------- |
| 布尔类型 | boolean | 没有固定大小 | false | true | Boolean |
| 字符类型 | char | 16 位(2 字节) | 0 | 65,535 | Character |
| 整数类型 | byte | 8 位(1 字节) | -128 | 127 | Byte |
| 整数类型 | short | 16 位(2 字节) | -32,768 | 32,767 | Short |
| 整数类型 | int | 32 位(4 字节) | -2,147,483,648 | 2,147,483,647 | Integer |
| 整数类型 | long | 64 位(8 字节) | -9,223,372,036,854,775,808 | 9,223,372,036,854,775,807 | Long |
| 浮点型 | float | 32 位(4 字节) | 1.4e-45 | 3.4028235e38 | Float |
| 浮点型 | double | 64 位(8 字节) | 4.9e-324 | 1.7976931348623157e308 | Double |
| | void | | | | Void |
解释一下为什么会将 void 当为第 9 种基本数据类型:
在 Java 中,类型的分类有两种,一种是基本类型,一种是引用类型。两者的区别本质上在于:
- 基本类型 : 在 JVM 的栈中分配空间存 “值”。
- 引用类型 : 在堆里面分配空间存 “值”。
Void 是不能 new 出来的(因为 Void 的源码中,将构造函数设置为 private 的,所以外部不能 new 对象),因此不能在堆里面分配空间存对应的值。那就是一开始在堆栈处分配好了空间。所以,将 Void 归成基本类型,也是有一定道理的。
> E 来表示单精度浮点数的指数符号。 如 1.254E+10 ,就是指 1.254 * 10^10 (单精度浮点数是指精确到 7 位的浮点数)
> D 来表示双精度浮点数的指数符号。如 1.231346464D+10 (双精度浮点数精确到 15 位)
>
> 浮点数是小数点后边的位数吗?是的,浮点数是指小数点后的位数。
>
> 为什么 java 中的 double 最大值是 1.7976931348623157e308,用 e 表示不用 d
> 在 Java 中,双精度浮点数(double)的最大值是 1.7976931348623157e308。这里使用的是科学计数法表示,即使用 "E" 来表示指数部分。在 Java 中,使用 "E" 来表示双精度浮点数的指数部分是一种约定俗成的写法,而不是强制规定。因此,虽然在科学计数法中通常使用 "E" 来表示指数,但在 Java 中也可以使用 "D" 来表示双精度浮点数,例如 1.7976931348623157D308。不过,通常情况下,Java 程序员更倾向于使用 "E" 来表示双精度浮点数的指数部分,以保持代码的一致性和可读性。
关于浮点类型的存储。
https://v.douyin.com/iFRAaA3v/
# 操作符
## 移位操作符
```
int i = -1;
System.out.println(Integer.toBinaryString(i));
```
这段代码会输出 `11111111111111111111111111111111`。这是因为在 Java 中,`int` 类型是一个 32 位的二进制数。当我们使用 `-1` 时,它在内存中的表示形式是一个所有位都为 1 的二进制数,即 32 个 1。这是因为 Java 使用了一种叫做二进制补码的方式来表示负数。
二进制补码的计算方式是:首先取该数的绝对值的二进制形式,然后对这个二进制数取反(即 0 变 1,1 变 0),最后在结果的基础上加 1。例如,对于 -1,我们首先取其绝对值 1 的二进制形式(即 00000000000000000000000000000001),然后取反得到 11111111111111111111111111111110,最后加 1 得到 11111111111111111111111111111111。
`Integer.toBinaryString(i)` 这个方法会将整数 `i` 转换为二进制字符串形式,所以输出的结果就是 `11111111111111111111111111111111`