在学习隐式和显式类型转换的同时,我尝试了以下代码:
class Implicit
{
public static void main(String args[])
{
byte a=10;
byte b=20;
a=a+b; //
System.out.println(a);
}
}编译器报告:

我尝试了这段代码,看看在这个示例中,一元运算符或任何其他操作是否会导致右侧的数据类型发生变化。
这就是这里正在发生的事情吗?若有,原因为何?还有哪些其他情况会导致数据类型改变?
发布于 2013-04-19 18:32:54
编译器警告你,因为byte+byte = int因此,它警告你何时尝试添加两个字节(本质上是加法后的整数)并将其分配给一个字节,这将导致精度损失,因为字节只能容纳8位,而作为整数可以容纳32位。
但是,当您使用时,这不会给您一个警告。
a+=b; //发布于 2013-04-19 18:37:38
它会警告您的
可能的精度损失
因为加法运算符使每个byte值在加法完成之前被提升为int (二进制数值提升)。因此,byte+byte将是一个int结果,要将其分配回字节a,它需要将int向下转换为byte。如果加法的值大于可以存储为byte值的值,则向下转换可能导致精度损失。
您可以通过显式向下转换为a=(byte)(a+b)来强制编译器接受这一点,因为您知道风险,而编译器不应该关心这些信号。
发布于 2013-04-19 18:35:19
add操作导致byte变量被提升为int。
请参阅此问题的答案Add bytes with type casting, Java
我不太明白为什么使用c#,但似乎是为了c#(是的,java也有类似的结果),这是为了性能。有关详细信息,请参阅此处byte + byte = int... why?
https://stackoverflow.com/questions/16102587
复制相似问题