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虚拟机规范》

  • 相关阅读:
    CentOS7系统基本操作
    python3安装
    nodejs基础【持续更新中】
    基于Jenkins实现持续集成【持续更新中】
    git之merge和rebase的区别
    服务器为什么这么慢?耗尽了CPU、RAM和磁盘I/O资源
    编程的四个境界
    Gunicorn独角兽
    Python 中 logging 日志模块在多进程环境下的使用
    vue+webpack怎么分环境进行打包
  • 原文地址:https://www.cnblogs.com/laydown/p/11832599.html
Copyright © 2011-2022 走看看