美文网首页深入理解JVM 随笔
2018-07-03 Java类结构与编译指令--类型自动转换

2018-07-03 Java类结构与编译指令--类型自动转换

作者: sunhuihui | 来源:发表于2018-07-03 14:46 被阅读23次

使用Java的都知道,在基本数据类型int/byte/short/char之间,byte/char/short与int类型运算及赋值时会自动提升类型,而反过来则会编译报错

通过JVM操作指令来解释这种现象

JVM虚拟机指令集所支持的数据类型

image
image

通过上图可以看到对于byte/short/char来说load/store以及各种运算操作,逻辑操作,

上代码

public byte testFun(){
        long l = 30l;
        int x = (int)l;
        
        byte b =100;
        b = (byte)x;
        
        return b;
    }

javap -v

 public byte testFun();
    descriptor: ()B
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=5, args_size=1
         0: ldc2_w        #2                  // long 30l
         3: lstore_1
         4: lload_1
         5: l2i                                 // x = (int)l
         6: istore_3
         7: bipush        100                // push一个byte常量到操作数栈
         9: istore        4                  // 将操作数栈存储到局部变量表slot_4
        11: iload_3                          // 从局部变量表slot_3加载到操作数栈
        12: i2b                              // b = (byte)x
        13: istore        4                  // 将操作数栈顶值保存以slot_4
        15: iload         4                  // 将slot_4加载到操作数栈的return value
        17: ireturn
      LineNumberTable:
        line 7: 0
        line 8: 4
        line 10: 7
        line 11: 11
        line 13: 15

仔细查看整个操作过程,与上面的表对应可看到;在运算的过程中,将byte类型加载到操作数栈时,使用的指令是iload_<n>,并且在return时,也同样的ireturn

相关文章

  • 2018-07-03 Java类结构与编译指令--类型自动转换

    使用Java的都知道,在基本数据类型int/byte/short/char之间,byte/char/short与i...

  • Java语言基础

    Java主类结构基本数据类型变量与常量运算符数据类型转换

  • 5分钟彻底理解-Java自动装箱、拆箱

    什么是自动装箱,拆箱 先抛出定义,Java中基础数据类型与它们的包装类进行运算时,编译器会自动帮我们进行转换,转换...

  • 笔记2018-08-28

    类型转换 自动类型转换运算转换(编译器会自动把小类型转换为大类型) 赋值转换(将等号右边的类型转换为等号左边的类型...

  • 2018-03-08

    #自动类型转换——————“狸猫换太子” 自动类型转换发生在不同数据类型运算时,在编译的时候自动完成。自动转换遵循...

  • Integer的IntegerCache

    首先我们对两个Integer进行比较 上面的程序允许结果如下: Java 编译器把原始类型自动转换为封装类的过程称...

  • java数据类型

    1、整型拓展 2、浮点数 3、类型转换 java强制类型转换和自动类型转换。自动类型转换是程序执行过程中自动进行转...

  • Java 数据类型的自动转换和强制转换

    Java 数据类型的自动转换和强制转换 自动转换 自动转换适用于低位数类型向高位数类型的转换 规则: 对于算术运算...

  • JAVA基础第四天

    JAVA数据类型---布尔类型; 数据类型转换自动数据类型转换 强制数据类型转换

  • JAVA自动装箱拆箱以及装箱时的缓存问题

    概述 JAVA中的自动装箱指的是把基本类型的值转换为对应的包装类对象,自动拆箱则相反。 JAVA中的基本类型: b...

网友评论

    本文标题:2018-07-03 Java类结构与编译指令--类型自动转换

    本文链接:https://www.haomeiwen.com/subject/ryaduftx.html