count=count++的覆盖增量问题
今天在学习中,朋友问了我一个问题,就是有关下面代码输出结果的问题,话不多说,先上段代码:
@Test
public void test03(){
int count = 0;
for(int i = 0; i < 2; i++){
count = count++;
}
System.out.println(count);
}
我当时也犹豫了很久,想着可能是2可能是0,我也不敢确定,最终输出结果是0.然后我们就一直找这个输出结果的原因,找了好久,然后我通过编辑工具找到了答案
上张图:
在这里我的IDEA安装了FindBugs插件,当我打出count=count++的时候,它马上给我报出了一个警告,通过这个警告,最终我找到了问题的答案。
以下是这两段解释的翻译:
问题分类: 正确性(死本地存储) DLS_OVERWRITTEN_INCREMENT(覆盖增量) FindPuzzlers (BSHIFT | Bx | DLS | DMI | USELESS_STRING |电子商务| ICAST | IC | IJU | IM | PZ | RV)
覆盖增量代码执行增量操作(例如i++),然后立即覆盖它。例如,i = i++立即用原始值覆盖递增的值。
在’count++'时更改的值从未减少使用…(Ctrl + F1) 检查信息:此检查指出变量值在赋值后从未使用的情况,即: -变量在赋值之后永远不会被读取,或者-值总是在下一个变量读取之前被另一个赋值覆盖,或者-变量初始化器是冗余的(原因有以上两个)