专栏首页个人分享JAVA虚拟机类型转换学习

JAVA虚拟机类型转换学习

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

这些操作码是把int类型转换为比int类型占据更小空间的数据类型。这些操作码从操作数栈中弹出一个int类型值,将它转换为能用byte、short或char类型描述的int类型值,然后再把这个转换后的int类型值压入栈。

Java虚拟机中没有把long、float、double类型值直接转换为比int类型占据更小空间的数据类型的操作码。那么把float类型值转换为byte类型需要两个步骤:

1、float类型值必须通过f2i指令转换为int类型

1、所得的int类型再通过i2b转换为byte类型值

涉及byte、short和char类型的运算操作首先会把这些值转换为int类型,然后对int类型值进行运算,最后得到int类型的结果,因此,如果把两个byte类型值相加,最后会得到一个Int类型的结果,如果需要得到byte类型结果,必须将这个int类型的结果显示转换为byte类型,否则会编译失败。

static byte addOneAndOne(){
    byte a = 1;
    byte b = 1;
    byte c = (byte)(a+b);
    return c;
    }

byte类型的最大值为127,最小值为-128.在这个范围内的int类型值转换为byte类型值,而当int类型值超出这个有效范围时,Java虚拟机通过截取和带符号扩展的方式将int类型值转换成为byte类型值。long、int、short和byte类型的最高位(“符号位”)指出此int类型值是正还是为负。如果符号位为0,值为正。如果符号位为1,值为负。byte类型的第7位为符号位。从int类型值转换到byte类型值的时候,第7位的值会被拷贝到第8位到31位。这样就产生了一个int类型值,这个值与原来类型值被转换为byte类型值后所获得的结果具有相同的数值。在执行完截取短和带符号扩展操作后,这个int类型变量中将容纳一个有效的byte类型的值。

例如, a变量的值为128(0x00000080),它被转换为byte类型后,所得到的byte类型值为-128(0xffffff80).然后,当a变量的值为-129(0xffffff7f)时,它被转换为byte类型后所得到的值为127(0x0000007f)

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Spark on Yarn年度知识整理

    Spark是整个BDAS的核心组件,是一个大数据分布式编程框架,不仅实现了MapReduce的算子map 函数和reduce函数及计算模型,还提供更为丰富的算子...

    用户3003813
  • 《组织行为学》---组织与管理

         任何社会都是一个组织的社会,尤其是现代社会更是如此。人们的生活不是彼此互不相干的,而是充满了人与人之间各种形式的交往互动,这就是我们通常所说的“社会生...

    用户3003813
  • kafka入门:简介、使用场景、设计原理、主要配置及集群搭建(转)

        Kafka is a distributed,partitioned,replicated commit logservice。它提供了类似于JMS的特...

    用户3003813
  • Java Grammar:数据类型

    我们知道,Java是一种 强类型 语言,类型对于Java语言来说非常的重要不言而喻,在Java中,分为 基础数据类型 和 引用数据类型 ,其中基础数据类型分为了...

    山禾说
  • 重拾Java(1)-基本数据类型与字面值

    Java是一种强类型化的语言,每个变量都有一种类型,每个表达式也都有一种类型,并且每一种类型都是严格定义的。所有的赋值操作不管是显式的还是在方法中调用中通过参数...

    叶应是叶
  • 面试官:兄弟,说说基本类型和包装类型的区别吧

    POJO 的英文全称是 Plain Ordinary Java Object,翻译一下就是,简单无规则的 Java 对象,只有属性字段以及 setter 和 g...

    Remember_Ray
  • 面试官:兄弟,说说基本类型和包装类型的区别吧

    POJO 的英文全称是 Plain Ordinary Java Object,翻译一下就是,简单无规则的 Java 对象,只有属性字段以及 setter 和 g...

    Remember_Ray
  • 面试官:兄弟,说说基本类型和包装类型的区别吧

    六年前,我从苏州回到洛阳,抱着一幅“海归”的心态,投了不少简历,也“约谈”了不少面试官,但仅有两三个令我感到满意。其中有一位叫老马,至今还活在我的手机通讯录里。...

    沉默王二
  • 腾讯企点+QTrade-金融OTC合规解决方案 | 满足金融行业监管要求,降低交易风险,提升交易效率!

    ? 腾讯企点 公众号ID:qidianonline 关注 ? 2018年6月22日,腾讯云下属的腾讯企点与其在金融领域 To B 业务的深度合作伙伴 QTr...

    腾讯企点
  • jQuery的deferred对象详解

    在讲述Promise时,曾提及过Deferred对象。下面内容,详细阐述Deferred对象及其用法。

    奋飛

扫码关注云+社区

领取腾讯云代金券