今天看到关于a[i]=i++的标题,内容也没看,就自己在这练习了一下,觉得挺有趣
第一种情况
package com.dong.test;
import org.junit.jupiter.api.Test;
public class Testadd {
@Test
public void test1() {
int [] array =new int[10];
for(int i = 0 ;i< 10;) {
array[i] = i++;
System.out.println("i的值为"+ i +"------->array"+(i)+"=="+array[i] );
}
}
}
如果不加思索,对于下标,有可能出现下标异常:主要是因为System.out.println()这个语句,因为它输出的是i自增之后的下标,对于数组,下标最大为9,所以i为9时,System.out.println()中的数组的i为10,则array[10]出错。可以去掉输出语句,则测试通过。
第二种情况
package com.dong.test;
import org.junit.jupiter.api.Test;
public class Testadd {
@Test
public void test1() {
int [] array =new int[10];
for(int i = 0 ;i< 9;) {
array[i] = i++;
System.out.println("i的值为"+ i +"------->array"+(i)+"=="+array[i] );
}
}
}
修改循环次数,则可以正确的输出array,避免下标异常,但是或许在第一次大家已经注意到,为什么每次数组的输出为0?
/**
分析:
1.i = 0 ;
2.array[i] = i++ ;
i++ => i = 0 => i++ => temp = 0; array[0] = 0; i = 1;
3.array[i] => array[1] = 0;(因为没有赋值,默认为0) , i = 1;
4.i = 1 ;
5.array[i] = i++;
i++ => i = 1 => i++ => temp = 1; array[i] = 1 ; i=2;
7.arry[i] = > array[2] = 0;(因为没有赋值,默认为0) , i = 1;
....
**/
注意: JVM 在处理 i = i++; 时 , 会创建临时变量来接收 i++ 的值 , 然后返回临时变量的值 ,然后将返回值赋值给左边。
正确的输出:
package com.dong.test;
import org.junit.jupiter.api.Test;
public class Testadd {
@Test
public void test() {
int [] array =new int[10];
for(int i = 0 ;i< 10 ;) {
array[i] = i++;
System.out.println("array"+(i-1)+"=="+array[i-1] + "====i的值为"+ i );
}
}
}
可以将i++转换为++i,结果将是不同的,简单分析:
/**
分析:++i
1. i = 0;
2. array[i] = ++i;
++i => i = 0 => ++i => temp = 1; array[0] = 1 ; i= 1;
......
**/
如有问题,敬请支持,谢谢阅读,与君共勉
参考博客:https://blog.csdn.net/tojohnonly/article/details/87877397