有趣的i++

今天看到关于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

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(程序设计)