java – 无法使用表达式增加字节值但使用增量运算符
发布时间:2020-12-15 00:42:43 所属栏目:Java 来源:网络整理
导读:参见英文答案 why byte += 1 compile but byte = byte + 1 not?8个 为什么 以下内容有效 byte i=0;i++; 其中以下内容无效 byte i=0;i=i+1; 会是什么原因? 我知道在i 1的情况下,整个值显式递增1(这将是int值),因此将发生编译问题,但是在i的情况下它会做同样
参见英文答案 >
why byte += 1 compile but byte = byte + 1 not?8个
为什么 以下内容有效 byte i=0; i++; 其中以下内容无效 byte i=0; i=i+1; 会是什么原因? 我知道在i 1的情况下,整个值显式递增1(这将是int值),因此将发生编译问题,但是在i的情况下它会做同样但没有得到任何错误. 解决方法
每当您在两个不同类型的操作数之间执行二进制操作时,其中一个操作数将被提升为更高类型.然后操作的结果就是那种类型.
因此,在您的情况下,字节类型a首先被提升为int,因为1是int类型.然后在加法运算之后,结果是int类型.现在,由于您无法为一个字节分配int,因此需要进行类型转换以删除编译器错误: byte a = 2; a = a + 1; // Error: Cannot assign an int value to byte a = (byte)(a + 1); // OK 现在,在复合赋值运算符的情况下,类型转换是为您隐式完成的.表达方式: a += 1 内部转换为: a = (byte)(a + 1); 这在JLS-§15.26.2 Compound Assignment Operator:中指定 形式E1 op = E2的复合赋值表达式等效于E1 =(T)((E1)op(E2)),其中T是E1的类型,除了E1仅被评估一次. 前缀增量运算符和后缀增量运算符的情况类似. 根据JLS – §15.15 Unary Operators: 前缀增量表达式的类型是变量的类型. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- java – getApplicationContext()中的空指针
- java – 如何在Kotlin中设计一个复杂的类,其中包含一些类以
- Java自学-数字与字符串 MyStringBuffer
- java – Integer.parseInt()不解析大的负数
- java – 使用select where where Mysql在Mysql中区分大小写
- java – 是否在TLAB中分配了ThreadLocal?
- java – 如何使用Spring MVC和Spring Security为资源处理程
- java – 如何使用UUID与Hibernate作为字段?
- 处理Java字符串中的Unicode代理值
- Java下载管理器