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

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

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

  1. 数据的内部强制类型转换:在下面的例子中,我们正在做算术运算i.e。b和1的加法。这里b是byte类型,1是int类型。因此,结果应该是int类型的i.e max(int,类型为b i.e)。Byte,类型为1 i.e。int)。在上面的程序中,我们将int类型赋值给字节类型,这就是为什么我们会得到编译时错误,说“可能失去精度”。这里需要类型转换来执行添加操作。

使用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类型i.e max(int,类型b i.e)。字节,类型为1 i.e。我们得到的结果是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

从上面的例子中我们可以理解,在自增/自减操作符中,编译器在需要时自动进行类型转换。但这是怎么发生的呢?让我们试着去理解:
假设我们必须执行increment,那么我们使用++操作符:

i++;

只是一个快捷方式:

i = i + 1;

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

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

将无法编译,因为我们将int值赋值给字节类型,而该语句中没有类型转换,但i++;将编译好了。

这意味着事实上i++;这种事有捷径吗

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

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

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程