在x++中,它将x的值增加1,在x=x+1中,它也将x的值增加1。但问题是两者是相同的,还是有任何区别。我们应该意识到,当我们试图在两个变量a和b之间应用任何算术运算符时,结果类型总是max(int,a的类型,b的类型)。现在让我们来看看两者之间的区别:
- 数据的内部类型转换: 在下面的例子中,我们正在对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);
- 这两种语言的编译器指令不同: 它们是不同的运算符,在字节码中使用不同的JVM指令。
x + 1 uses iadd instruction, whereas x++ uses iinc instruction internally
尽管这取决于编译器。编译器可以自由地为特定操作使用不同的指令集。
本文由 比沙尔·库马尔·杜比 .如果你喜欢GeekSforgek,并想贡献自己的力量,你也可以使用 贡献极客。组织 或者把你的文章寄到contribute@geeksforgeeks.org.看到你的文章出现在Geeksforgeks主页上,并帮助其他极客。
如果您发现任何不正确的地方,或者您想分享有关上述主题的更多信息,请写下评论。