首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Java (隐式类型转换):一元运算符是否会影响操作中变量的数据类型?

Java (隐式类型转换):一元运算符是否会影响操作中变量的数据类型?
EN

Stack Overflow用户
提问于 2013-04-19 18:31:05
回答 3查看 342关注 0票数 1

在学习隐式和显式类型转换的同时,我尝试了以下代码:

代码语言:javascript
运行
复制
class Implicit
{
    public static void main(String args[])
    {
        byte a=10;
        byte b=20;

        a=a+b; //

        System.out.println(a);
    }
}

编译器报告:

我尝试了这段代码,看看在这个示例中,一元运算符或任何其他操作是否会导致右侧的数据类型发生变化。

这就是这里正在发生的事情吗?若有,原因为何?还有哪些其他情况会导致数据类型改变?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-04-19 18:32:54

编译器警告你,因为byte+byte = int因此,它警告你何时尝试添加两个字节(本质上是加法后的整数)并将其分配给一个字节,这将导致精度损失,因为字节只能容纳8位,而作为整数可以容纳32位。

但是,当您使用时,这不会给您一个警告。

代码语言:javascript
运行
复制
    a+=b; //
票数 4
EN

Stack Overflow用户

发布于 2013-04-19 18:37:38

它会警告您的

可能的精度损失

因为加法运算符使每个byte值在加法完成之前被提升为int (二进制数值提升)。因此,byte+byte将是一个int结果,要将其分配回字节a,它需要将int向下转换为byte。如果加法的值大于可以存储为byte值的值,则向下转换可能导致精度损失。

您可以通过显式向下转换为a=(byte)(a+b)来强制编译器接受这一点,因为您知道风险,而编译器不应该关心这些信号。

票数 1
EN

Stack Overflow用户

发布于 2013-04-19 18:35:19

add操作导致byte变量被提升为int。

请参阅此问题的答案Add bytes with type casting, Java

我不太明白为什么使用c#,但似乎是为了c#(是的,java也有类似的结果),这是为了性能。有关详细信息,请参阅此处byte + byte = int... why?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16102587

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档