x++ 中,它将 x 的值增加 1,在 x=x+1 中,它也将 x 的值增加 1。但问题是两者相同或它们之间有任何区别。我们应该意识到,每当尝试在两个变量 ab 之间应用任何算术运算符时,结果类型始终是 max(int,a 的类型,b 的类型)。下面来看看它们的区别:

1、数据的内部类型转换:在下面的示例中,进行算术运算,即对 b1 进行加法运算。这里 b 是字节类型,1int 类型。因此,结果应该是 int 类型,即 max(int,type of b 即 byte,type of 1 即 int)。在上面的程序中,将 int 类型分配给 byte 类型,这就是为什么会收到编译时错误,说“可能丢失精度”。这里需要进行类型转换才能执行加法。

使用 x = x + 1

// Java program to illustrate
// how arithmetic operations performed
// depends on data types
public class Test
{
    public static void main(String[] args)
    {
        byte b = 10;

        // Using b = b+1
        b = b + 1;
        System.out.println(b);

        /* Using typecasting will work
        b=(byte)b+1;
        System.out.println(b);*/
    }
}

运行结果如下:

error: incompatible types: possible lossy conversion from int to byte

使用类型转换,输出结果将是:

11

使用 x++

在下一个示例中,执行增量,但在内部执行类似 b++ 的操作。结果应该是 int 类型,即 max(int,type of b i.e. byte,type of 1 i.e. int)得到的结果为 11,因为隐式类型转换是由编译器完成的,如 byte b=(byte)(b+1 ) -

// Java program to understand the
// operations of ++ operator
public class Test
{
    public static void main(String[] args)
    {
        byte b = 10;
        b++;
        System.out.println(b);
    }
}

运行结果如下:

11

从上面的例子可以了解到,在递增/递减运算符中,编译器会在需要时自动进行类型转换。但这是怎么发生的?让我们试着理解:
假设必须执行增量然后使用 ++ 运算符:

i++;

只是以下的快捷写法:

i = i + 1;

但是如果像下面这样为 ij 取值怎么办?

byte i = 1;
Then i = i + 1;

不会编译,因为将 int 值分配给字节类型,并且该语句中没有类型转换,但 i++; 编译没有问题。这意味着实际上 i++; 是这样的处理方式:

i = (type of i)(i + 1);

2、两者的编译器指令不同: 它们是不同的运算符,并且在字节码中使用不同的 JVM 指令。

x + 1 使用 iadd 指令,
而 x++ 在内部使用 iinc 指令

虽然这取决于编译器。编译器可以自由地为特定操作使用不同的指令集。

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