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

4.1 KiB

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