JAVA基础自加i++

        世界上往往最复杂的东西,看起来都最简单,比如i++和++i,前面这个是先用再加,后面是先加再用,道理人人都懂,但是其中蕴藏很深的玄机,请看如下四个例子,你知道他们答案是多少吗?

        1、

 

	public static void main(String[] args) {
	       int m=0;
	       for(int i=0;i<100;i++){
	              m=m++;
	      }
	      System.out.println("m="+m);
	  }

         结果为:

 

 

m=0

        2、

 

 

	public static void main(String[] args) {
		int m = 0;
		for (int i = 0; i < 100; i++) {
			m = ++m;
		}
		System.out.println("m=" + m);
	}

         结果为:

 

 

m=100

         3、

 

 

	public static void main(String[] args) {
		int m = 0;
		for (int i = 0; i < 100; i++) {
			m = i++;
		}
		System.out.println("m=" + m);
	}

         结果为:

 

 

m=98

          4、

 

 

	public static void main(String[] args) {
		int m = 0;
		for (int i = 0; i < 100; i++) {
			m = ++i;
		}
		System.out.println("m=" + m);
	}

          结果为:

 

 

m=99

           为什么呢? 一个一个来

 

   (1) m=m++,可以这样理解,首先看后面,m在前,是先用再加,m一直在用,所以每次赋值都无效!!!所以一直还是原来的值,即0。点评,这个很变态...

   (2)m=++m,首先还是看后面,+在前,先加再用,即先加个一,再赋值,所以每次都改变,当i=0的时候,m=1,当i=99,m=100.怎么快速得到呢,即m=(99-0)+1嘛!点评,这个,有点技术含量。

   (3)i=98的时候,执行自加,m=98。这个时候,在循环体里面的i已经达到99了,加完后再回到for表达式的自加,i变成100,进入判断i<100,不再执行循环,推出。 点评,这个,,,很容易搞错成100或者99。

   (4)和3道理一样,i到98,因为是先加再用,最后一次i=98,加1后为99,所以最终m=99.点评,这个和(3)一样容易搞错。

 

 

   总结:

   1.先看for的执行顺序:

 

for(sta1;sta2;sta3) {
       sta4;
}

 

 

   (1)进入循环执行sta1;//只是进入的时候执行.
   (2)执行sta2;//条件为真才执行sta4,不然就跳出for了.
   (3)执行sta4;
   (4)执行sta3;
   (5)再回到第2步开始执行

   2.上面四道题目的思考:

(1)遇到又自加又赋值的表达式,一定要仔细研究,最好自己debug一下,看下结果具体是怎么样的。说实在话,我第一次做,全错。

   (2)i++后还进行赋值是一种不严谨的操作方式,在c语言中已经被认为是不稳妥的。尽量在自加后不要乱赋值,比如1可以改写为m=m+1,那么肯定是100.

   (3)for循环尽量不要对循环变量赋值和自加,自减.如果要计算的话,可以取个临时变量先接受i的值,比如,3可以改为

	public static void main(String[] args) {
		int m = 0;
		for (int i = 0; i < 100; i++) {
			int temp = i;
			temp++;
			m = temp;

		}
		System.out.println("m=" + m);
	}

 那么结果肯定也是100.

 

转自:http://nannan408.iteye.com/blog/1238745

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值