package com.example.elasticsearch;public class Test1 {public static void main(String[] args) {int i = 10;i = i++;System.out.println(i);}
}
以上代码输出为10,为何?
这个问题涉及到Java中的后缀递增运算符(i++
)的工作原理。当你使用后缀递增运算符时,表达式的值是递增之前的值。尽管i
的值在递增后变成了11,但是由于赋值操作(i = i++
)的特殊性,实际上发生了以下步骤:
- 临时存储原始值:
i++
操作首先将i
的原始值(10)临时存储起来。 - 递增操作:然后,
i
的值被递增,此时i
变为11。 - 赋值操作:最后,将临时存储的原始值(10)赋值给
i
。
因此,尽管i
被递增了,但是赋值操作使得i
又被重置为了递增之前的值。这就是为什么最终输出的是10,而不是11。
这个行为体现了Java中后缀递增运算符的特点,即先返回变量的当前值,然后再对变量进行递增。在实际编程中,将递增运算符的结果赋值给同一个变量通常是不推荐的,因为它可能导致混淆和不预期的结果。