深入虚拟机笔记之类型转换

本文深入探讨了Java虚拟机中基本类型的转换操作,特别是在int、float、long和double之间的转换过程。文章通过具体示例说明了如何正确处理byte、char、short等类型在运算中的自动转换,并强调了显式类型转换的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第11章 类型转换

 

    java虚拟机包括许多进行基本类型转换工作的操作码,这些执行转换工作的操作码后面没有操作数,转换的值从栈顶端获得。java虚拟机从栈顶端弹出一个值,对它进行转换, 然后再把转换结果压入栈。

    int、float、long和double相互转换操作码:

    int类型转换为比int类型占据更小空间的数据类型:byte、char、short。    

    float转换为byte需要两个步骤:首先float必须通过f2i转换为int类型,然后再通过i2b指令转换为byte类型。

    不存在把byte、char、short转换为int的指令,因为任何byte、char、short类型值压入栈的时候,就已经有效地被转换为int类型值。从数组或堆中的对象中接受byte、char、short类型值的指令和把这些值压入栈的指令都会把它们转换为int类型值。

    涉及byte、char、short类型的运算操作首先会把它们转换为int类型,然后对int类型值进行运算,最后得到int类型的结果。如果需要得到相应更小类型的结果,必须将这个int结果显示转换为对应的类型。

 

class ArithmeticExample {

        static byte addMethod() {

                byte a = 1;
                byte b = 1;
                //编译错误:无法把int结果赋值给byte类型
                b = a + b;
                return b;
        }
        //正确的做法
        static byte addMethodCorrect() {

                byte a = 1;
                byte b = 1;
                b = (byte) (a + b);
                //或者使用复合运算符: b += a;
                return b;
        }
}

 

    java虚拟机通过截短和带符号扩展的方法将int、long类型转换为byte、short和int类型。

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值