类型转换指令可以将两种不同的数值类型进行相互转换,这些转换操作一般用于实现用户代码中的显式类型转换操作,或者用来处理本节开篇所提到的字节码指令集中数据类型相关指令无法与数据类型一一对应的问题。

Java虚拟机直接支持(即转换时无需显式的转换指令)以下数值类型的宽化类型转换

(Widening Numeric Conversions,即小范围类型向大范围类型的安全转换):

int类型到long、float或者double类型。

long类型到float、double类型。

float类型到double类型。

相对的,处理窄化类型转换(Narrowing Numeric Conversions)时,必须显式地使用转换指令来完成,这些转换指令包括:i2b、i2c、i2s、l2i、f2i、f2l、d2i、d2l和d2f。窄化类型转换可能会导致转换结果产生不同的正负号、不同的数量级的情况,转换过程很可能会导致数值的精度丢失。

在将int或long类型窄化转换为整数类型T的时候,转换过程仅仅是简单地丢弃除最低位N 个字节以外的内容,N是类型T的数据类型长度,这将可能导致转换结果与输入值有不同的正负号。这点很容易理解,因为原来符号位处于数值的最高位,高位被丢弃之后,转换结果的符号就取决于低N个字节的首位了。

在将一个浮点值窄化转换为整数类型T(T限于int或long类型之一)的时候,将遵循以下转换规则:

如果浮点值是NaN,那转换结果就是int或long类型的0。

如果浮点值不是无穷大的话,浮点值使用IEEE 754的向零舍入模式取整,获得整数值v,如果v在目标类型T(int或long)的表示范围之内,那转换结果就是v。

否则,将根据v的符号,转换为T所能表示的最大或者最小正数。

从double类型到float类型的窄化转换过程与IEEE 754中定义的一致,通过IEEE 754向最接近数舍入模式舍入得到一个可以使用float类型表示的数字。如果转换结果的绝对值太小而无法使用float来表示的话,将返回float类型的正负零。如果转换结果的绝对值太大而无法使用

float来表示的话,将返回float类型的正负无穷大,对于double类型的NaN值将按规定转换为float类型的NaN值。

尽管数据类型窄化转换可能会发生上限溢出、下限溢出和精度丢失等情况,但是Java虚拟机规范中明确规定数值类型的窄化转换指令永远不可能导致虚拟机抛出运行时异常。

java 类型转换 安全_JAVA 类型转换指令相关推荐

  1. java 类型转换顺序_Java类型转换,顺序结构及条件结构,循环结构

    一.Java类型转换 转换类型: 1.自动类型转换:把小的放到大的里面 2.强制类型转换:把大的放到小的里面 3.把字符串类型转换成其他数据类型(使用对应包装类的parsexxx()方法) 同类型转换 ...

  2. java自动转换_java类型转换详解(自动转换和强制转换)

    自动转换 class Hello { public static void main(String[] args) { //自动转换 int a = 5; byte b = 6; int c = a ...

  3. java二进制命令_Java二进制指令代码解析

    常量入栈指令 操作码(助记符) 操作数 描述(栈指操作数栈) aconst_null null值入栈. iconst_m1 -1(int)值入栈. iconst_0 0(int)值入栈. iconst ...

  4. java 解析二进制_Java二进制指令代码解析

    常量入栈指令 操作码(助记符) 操作数 描述(栈指操作数栈) aconst_null null值入栈. iconst_m1 -1(int)值入栈. iconst_0 0(int)值入栈. iconst ...

  5. java 类型转换方法_Java中的实用类型转换的方法

    Java中的实用类型转换的方法 1,              类型转换 JAVA中常用数据类型转换函数 虽然都能在JAVA API中找到,整理一下做个备份. string->byte Byte ...

  6. Java中的基本数据类型转换(自动、强制、提升)

    转载自 Java中的基本数据类型转换(自动.强制.提升) 说基本数据类型转换之前,先了解下 Java 中的 8 种基本数据类型,以及它们的占内存的容量大小和表示的范围,如下图所示. 重新温故了下原始数 ...

  7. java类型转换答案,在java中支持两种类型的类型转换,自动类型转换和强制类型转换。父类转化为子类需要强制转换。...

    在java中支持两种类型的类型转换,自动类型转换和强制类型转换.父类转化为子类需要强制转换. 更多相关问题 计算机病毒通过()传染扩散得极快,危害最大. 当一个现象的数量由小变大,另一个现象的数量相反 ...

  8. 深入了解Java开发过程中的类型转换

    Java开发过程中有一个特性需要我们注意,整型.实型(常量).字符型数据可以进行混合运算. 所以,在运算过程中,不同类型的数据会先转化为同一类型,然后进行运算. 深入了解Java开发过程中的类型转换 ...

  9. 089day(JAVA变量输入输出,类型转换,运算符的练习和概念的内涵和外延)

    172210704111-陈国佳总结<2018年1月7日>[连续089天] 标题: JAVA变量输入输出,类型转换,运算符的练习和概念的内涵和外延: 内容: A.JAVA输入输出练习: i ...

最新文章

  1. matlab中窗函数的使用(二)
  2. Java通过JDBC连接SQL Server2017数据库
  3. 设计一个名为complex的类来表示复数_天线波束设计
  4. css书写格式 /* css hacker */
  5. 【干货】某视频app推荐详解.pdf(附下载链接)
  6. 基于非特定人语音识别芯片的技术方案
  7. LINUX 版本信息查看(全)
  8. html ztree选中状态,ztree-select.html
  9. Android屏幕共享与直播-red5流媒体服务器搭建
  10. Ubuntu 安装 CURL 过程
  11. 编写TaskMgr.exe的时候学习的知识点
  12. nvidia驱动,cuda与cudnn的关系
  13. 100万量子比特,PsiQuantum要怎样实现?
  14. java实现Word 文档形式的导出功能
  15. textarea 中的内容自动换行
  16. Python 不用selenium 带你高效爬取京东商品评论
  17. 巧用ecshop做淘宝客
  18. python数据分析知识体系_数据分析知识体系
  19. 直通车在第一次做应该如何出价呢?如何出价更合理?
  20. FS TIB TEB PEB

热门文章

  1. [软技能] png-8和png-24有什么区别?
  2. [html] 对于写一个页面布局,html/css/js这三者你是先写哪个后写哪个?
  3. [vue] 怎么在vue中使用插件?
  4. [js] 如何判断对象是否属于某个类?
  5. 工作188:表单校验规则
  6. 前端学习(2360):生命周期函数的学习
  7. 前端学习(2057):vue.js的安装方法
  8. 前端学习(1809):前端调试之微博头部开发
  9. 前端学习(1614):oracle数据库管理
  10. Request请求:Failed to execute ‘setRequestHeader‘ on ‘XMLHttpRequest‘: String contains non ISO-8859-1 c