许多程序员认为语句x += i只是x = x + i的简写vSdIFfER。这并不完全正确。这两个语句都是赋值表达式。第二个语句使用简单赋值运算符 (=),而第一个语句使用复合赋值运算符。复合赋值运算符有 +=-=*=/=%=vSDIFFer
Java 语言规范说复合赋值 E1 op= E2 等价于简单赋值,
E1 = (T) ((E1) op (E2)),其中 T 是 E1 的类型vSdiFfeR
换句话说,复合赋值表达式会自动将它们执行的计算结果转换为左侧变量的类型。如果结果的类型与变量的类型相同,则强制转换无效。但是,如果结果的类型比变量的类型更宽,则复合赋值运算符将执行静默缩小原语转换。尝试执行等效的简单赋值会产生编译错误VsDiFfER

考虑以下示例-

// A Java program that uses compound assignment
// for different types.
class GFG{
    public static void main(String s[]) {
        short x = 0;
        int i = 123456;
        x += i; // Casts result to short
        System.out.println(x);
    }
}

输出结果:

-7616

可能希望在这条语句执行后 x 的值是 123456,但事实并非如此;运行结果是-7616VsDifferint123456 太大而无法放入short类型中。 自动生成的转换后的值。 它默默地删除了 int 值的两个高位字节。

// A Java program that uses simple addition
// for different types.
class GFG{
    public static void main(String s[]) {
        short x = 0;
        int i = 123456;
        x = x + i; // Causes compilation error
        System.out.println(x);
    }
}

输出结果:

prog.java:5: error: incompatible types: possible 
lossy conversion from int to short
x = x + i;
    ^

从上面的示例中可以清楚地看出,复合赋值表达式可能会导致不良结果,应谨慎使用:byteshortchar 等类型。 如果我们使用它们,那么必须确保右边的表达式类型不是更高的精度。

欢迎任何形式的转载,但请务必注明出处,尊重他人劳动成果。
转载请注明:文章转载自 有区别网 [http://www.vsdiffer.com]
本文标题:Java中简单赋值和复合赋值的区别
本文链接:https://www.vsdiffer.com/vs/difference-simple-compound-assignment-java.html
免责声明:以上内容仅是站长个人看法、理解、学习笔记、总结和研究收藏VSDIFfer。不保证其正确性,因使用而带来的风险与本站无关!如本网站内容冒犯了您的权益,请联系站长,邮箱: ,我们核实并会尽快处理。