zoukankan      html  css  js  c++  java
  • Java中运算导致的基本数据类型自动转型 int i ; System.out.println(false?i:'e') 引发的血案

    话不多说,看图!!!

     其实运行结果还不太清晰,再看图

     第一次打印 是 char 类型的 e ,对应(C);

     第二次打印 是 int 类型的 101,对应(I);

     第三次打印 是 long 类型的 101,对应(J).

    此时就验证了一些理论:
    自动类型转换也叫隐式类型转换

    表达式的数据类型自动提升

    所有的byte型、short型和char的值将被提升到int型。

    如果一个操作数是long型,计算结果就是long型;

    如果一个操作数是float型,计算结果就是float型;

    如果一个操作数是double型,计算结果就是double型。

     详见 《java虚拟机规范》

    表 2.3 Java 虚拟机指令集所支持的数据类型
    实际类型 运算类型 分类
    boolean int 分类一
    byte int 分类一
    char int 分类一
    short int 分类一
    int int 分类一
    float float 分类一
    reference reference 分类一
    returnAddress returnAddress 分类一
    long long 分类二
    double double 分类二
    有部分对操作栈进行操作的 Java 虚拟机指令(例如 pop 和 swap 指令)是与具体类型无关
    的,不过这些指令也必须受到运算类型分类的限制,这些分类也在表 2.3 中列出了。
    表 4.2 基本类型字符解释表
    字符 类型 含义
    B byte 有符号字节型数
    C char Unicode 字符,UTF-16 编码
    D double 双精度浮点数
    F float 单精度浮点数
    I int 整型数
    J long 长整数
    S short 有符号短整数
    Z boolean 布尔值 true/false
    L Classname; reference 一个名为<Classname>的实例
    [ reference 一个一维数组
    举个例子:描述 int 实例变量的描述符是“I”;java.lang.Object 的实例描述符是“Ljava/lang/Object;”。注意,这里用到了类 Object 的二进制名的内部形式(此处是内部形式)。double 的三维数组“double d[][][];”的描述符为“[[[D”。 

     详见 《java虚拟机规范》

  • 相关阅读:
    MongoDB4.0以下版本,同一台电脑安装2个MongoDB服务
    CMake编译Mysql connector C++
    Winsock I/O方法
    查看mysql版本的四种方法(转)
    WorkBench,DELETE 标准语句失败
    Qt 透明对话框 自定义透明度
    QString 分割字符串时产生乱码的问题
    winsock error 相关
    线程的分离状态与结合状态
    Oracle 语法
  • 原文地址:https://www.cnblogs.com/laydown/p/11832599.html
Copyright © 2011-2022 走看看