Java中x++和x=x+1的区别

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

null
  1. 数据的内部类型转换: 在下面的例子中,我们正在对b和1进行算术运算,即加法。这里b是字节类型,1是int类型。因此,结果应该是int类型,即max(int,类型为b,即字节,类型为1,即int)。在上面的程序中,我们将int-type分配给byte-type,这就是为什么我们得到编译时错误,称为“可能丢失精度”。这里需要进行类型转换来执行添加。

    使用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,类型为b,即字节,类型为1,即int),我们得到的结果是11,因为隐式类型转换是由编译器完成的,比如字节b=(字节)(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;

    但如果我们像这样取i和j的值呢:

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

    将不会编译,因为我们正在为字节类型分配int值,并且该语句中没有类型转换,只有i++;会很好的。 这意味着事实上i++;是这样的捷径吗

    i = (type of i)(i + 1);
  2. 这两种语言的编译器指令不同: 它们是不同的运算符,在字节码中使用不同的JVM指令。
    x + 1 uses iadd instruction, 
    whereas x++ uses iinc instruction internally

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

本文由 比沙尔·库马尔·杜比 .如果你喜欢GeekSforgek,并想贡献自己的力量,你也可以使用 贡献极客。组织 或者把你的文章寄到contribute@geeksforgeeks.org.看到你的文章出现在Geeksforgeks主页上,并帮助其他极客。

如果您发现任何不正确的地方,或者您想分享有关上述主题的更多信息,请写下评论。

© 版权声明
THE END
喜欢就支持一下吧
点赞11 分享