java防止整型转为E_Java中运算导致的基本数据类型自动转型 int i ; System.out.println(false?i:'e') 引发的血案...

话不多说,看图!!!

8da306ee6e78e4aa8a223d277764d30f.png

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

ea9fbf5c032ab4f385e53c40f8622191.png

第一次打印 是 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 一个名为的实例

[ reference 一个一维数组

举个例子:描述 int 实例变量的描述符是“I”;java.lang.Object 的实例描述符是“Ljava/lang/Object;”。注意,这里用到了类 Object 的二进制名的内部形式(此处是内部形式)。double 的三维数组“double d[][][];”的描述符为“[[[D”。

详见 《java虚拟机规范》

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值