最近朋友小李去面试开发岗位,信心满满地准备了项目经验和技术框架,结果在一道看似简单的整数类型笔试题上栽了跟头。题目问:int 和 long 在 Java 中有什么区别?他答得模棱两可,面试官脸上的表情也渐渐变了。
别小看基础,整数类型是常考项
很多人觉得整数类型太基础,实际写代码用 IDE 自动提示就行,没必要记。但笔试题恰恰爱从这里下手。比如常见的问题:
- int 最大值是多少?
- long 类型在 32 位和 64 位系统下长度一样吗?
- 为什么有时候写 10000000000 会报错,要加 L?
这些问题看着简单,但答不上细节,就容易被判定“基础不牢”。
典型题目还原
有家公司出过这样一道题:
int a = 1000000;
int b = 1000000;
long c = a * b;
System.out.println(c);
问输出结果是多少?不少人脱口而出:1000000000000。其实不对。因为 a * b 是两个 int 相乘,结果还是 int,但已经溢出了。正确做法应该是:
long c = (long) a * b;
先转成 long 再计算,才能得到正确结果。
C/C++ 中的陷阱更多
在 C 语言里,int 的大小依赖编译器和平台。有些嵌入式系统中,int 是 16 位,而现代 PC 上通常是 32 位。这就导致同样的代码在不同环境下行为不一样。
比如这段代码:
#include <stdio.h>
int main() {
unsigned int x = -1;
printf("%u", x);
return 0;
}
输出居然是 4294967295。因为 -1 强制转成无符号整数,变成了最大值。这种题在笔试中一出,总有人中招。
Python 也不轻松
你以为 Python 没有这个问题?其实也有。虽然 Python 3 的 int 支持任意精度,但面试官可能会问:为什么 Python 整数不会溢出?底层是怎么实现的?
这时候你要能说出“Python 的整数其实是对象,超过机器字长时自动切换为大整数结构”,才算过关。
出行路上也能复习的小技巧
坐地铁、等车的时候,拿手机刷几道题挺合适。可以提前把常见整数类型题整理成卡片,比如:
- Java 中 byte 范围是 -128 到 127
- long 型常量要加 L,不然默认是 int
- Integer.MAX_VALUE 是 2147483647
这些数字背熟了,遇到题就不慌。就像出门前查好路线,到了地方才不会手忙脚乱。