简短回答
在 Java 中,long 数据类型固定占用 8 个字节(64 位)。

详细解释
-
固定大小 Java 语言规范明确规定,
long类型是 64 位有符号整数,这意味着它在所有 Java 平台(无论是 Windows、Linux 还是 macOS,无论是 32 位还是 64 位 JVM)上,都占用 64 位,即 8 个字节,这是 Java “一次编写,到处运行”(Write Once, Run Anywhere)理念的重要体现。 -
为什么需要
long? Java 中还有另一种整数类型int,它占用 4 个字节(32 位)。int的表示范围是 -2,147,483,648 到 2,147,483,647,当需要进行更大数值的计算时(计算文件大小、内存地址、时间戳等),int就不够用了,这时就需要使用long。 -
long的表示范围 由于long是 64 位有符号整数,它的表示范围是:- 最小值:
-9,223,372,036,854,775,808(即 -2⁶³) - 最大值:
9,223,372,036,854,775,807(即 2⁶³ - 1)
- 最小值:
-
如何声明和使用
long
(图片来源网络,侵删)-
声明变量:
long myLongNumber;
-
赋值: 在 Java 中,一个整数字面量(如
123)默认被当作int类型,如果要将一个数值赋给long变量,并且这个数值超出了int的范围,你必须在数字后面加上L或l后缀。强烈推荐使用大写的L,因为小写的l容易和数字1混淆。// 正确:使用 L 后缀 long bigNumber = 123456789012345L; // 这个数字超过了 int 的范围 // 错误:会编译失败,因为 123456789012345 超出了 int 的范围 // long anotherBigNumber = 123456789012345; // 正确:即使数值在 int 范围内,加上 L 也不会错,但可以显式表示意图 long smallNumberForLong = 100L; // 正确:一个在 int 范围内的数字可以自动提升为 long long autoPromoted = 100;
-
-
与
int的运算 当long和int进行混合运算时,int类型的值会被自动提升为long类型,整个运算结果也是long类型。int a = 100; long b = 200L; // a + b 的结果是 long 类型 long result = a + b; // 300L // 如果试图将结果赋给一个 int 变量,会编译失败,因为可能丢失精度 // int wrongResult = a + b; // 编译错误: incompatible types: possible lossy conversion from long to int
总结表格
| 数据类型 | 大小 (字节) | 大小 (位) | 默认值 | 范围 |
|---|---|---|---|---|
byte |
1 | 8 | 0 |
-128 到 127 |
short |
2 | 16 | 0 |
-32,768 到 32,767 |
int |
4 | 32 | 0 | -2,147,483,648 到 2,147,483,647 |
long |
8 | 64 | 0L | -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 |
float |
4 | 32 | 0f |
约 ±3.40282347 x 10³⁸ (7 位有效数字) |
double |
8 | 64 | 0d |
约 ±1.7976931348623157 x 10³⁰⁸ (15 位有效数字) |
char |
2 | 16 | '\u0000' |
\u0000 到 \uffff (0 到 65,535) |
boolean |
(理论上)1 | (理论上)1 | false |
true 或 false |
核心要点:在 Java 中,long 永远是 8 个字节,这是由语言规范保证的,与操作系统或硬件无关。
