这道基础面试题看似简单,但是没几个人能做对

tech2025-08-05  6

一、题目

我们来看一段代码:

public class Test{ public static void main(String[] args){ int i2 = 128; byte b = (byte) i2; System.out.println(b); } }

这段代码的输出结果是什么呢?我知道byte类型的存储范围是-128~127。上面这段代码我第一次遇到时候,总以为他会强转成byte类型的127,然而我错了。

我们看一下结果:

输出结果竟然是-128?为什么会这样?不可思议。

二、分析

其实之所以会造成这样的结果,其实它涉及到了计算机底层原理二进制。 我们简单通俗的来解决这个问题。

我们想让四字节32位(DWORD)的int类型的128强转成一字节8位(BYTE)的byte类型。

我们打开计算器看看int类型的+128的二进制表示是什么:

我们看一下byte类型的-128的二进制表示:

三、总结

清楚之后我们就能解释下面这个面试题:

四字节(32位)int类型的+128 强转成 一字节(8位)byte类型,就只保留最低的8位,都是 1000 0000 public class Test{ public static void main(String[] args){ int i2 = 128; byte b = (byte) i2; System.out.println(b); } }

所以输出结果就是:-128

最新回复(0)