You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java强制类型转换时数值转换规则及临时运算内存管理问题

public class Try {   
    public static void main(String[] args) {
        int num = (byte)129;        
        System.out.println(num); // result is: -127
    }
}

问题1解答

你的说法在当前场景下是准确的:方法内声明的局部基本类型变量确实由栈空间存储,你例子中的num是main方法的局部变量,因此分配在栈上。
补充一个前提说明:如果基本类型是类的实例成员/静态成员,会跟随对象或类元数据存储在堆空间,只有方法作用域内的局部变量才会走栈分配。

问题2解答

你描述的整个转换过程完全正确,每一步都符合Java的语言规范:

  • 字面量129默认是int类型,占4字节,补码表示的二进制确实为00000000 00000000 00000000 10000001
  • 执行(byte)强制窄化转换时,Java对整数类型的窄化规则就是直接截断取低N位,这里取低8位得到10000001,byte是有符号类型,最高位为1代表负数,按补码规则计算真值就是-127
  • 最后将byte类型的-127赋值给int类型的num时,会自动执行有符号扩展,高位全部补符号位1,最终num存储的4字节二进制就是11111111 11111111 11111111 10000001,和你描述的完全一致。

内容的提问来源于stack exchange,提问作者Hodiya Eyal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 13:36:04