详解Java中i++和++i的区别

i++ :先赋值再自增
先在i所在的表达式中使用i的当前值,后让i加1
++i :先自增再赋值
让i先加1,然后在i所在的表达式中使用i的新值

以下列java代码为例:
详解Java中i++和++i的区别_第1张图片
运算结果为:在这里插入图片描述

这表明: i++是指先把i=0的值赋值给j, 然后再自身加1;

对于++i:
详解Java中i++和++i的区别_第2张图片

运算结果为:
在这里插入图片描述
表明++i是指先自身加1后赋值给z;
还要注意二者的以下使用不同:

// 测试三
		i = 0;
		i++;
		i++;
		i++;
		i++;
		i++;
		System.out.println("i=" + i);

		// 测试四
		
		i = 0;
		i = i++;
		i = i++;
		i = i++;
		i = i++;
		i = i++;
		System.out.println("i=" + i);

测试结果为:
在这里插入图片描述
后面一种写法结果为零,是因为i 先执行 i=i=0,之后才会自加
但五个i=i++, 是赋值之后再自增1,i=0这个值先进寄存器,然后i在内存自增1,
最后赋值的时候寄存器出来的0值会冲掉1值成为最终结果,所以无论多少个结果都会是0。
而++i不会有这种问题

在一些视频教程里面写for循环的时候都是写 ++i 而不是 i++,因为这涉及到效率问题
++i相当于下列代码

i += 1; 
return i; 

i++相当于下列代码

j = i; 
i += 1; 
return j;

当然如果编译器会将这些差别都优化掉,那么效率就都差不多了。

在Java中i++语句是需要一个临时变量取存储返回自增前的值,而++i不需要。这样就导致使用i++时系统需要先申请一段内存空间,然后将值放进去,不用了才去释放。
多了这么一系列操作当然耗时,最后建议大家以后在写for循环且不影响逻辑的情况下多使用++i,少使用i++,

你可能感兴趣的:(java)