世界上往往最复杂的东西,看起来都最简单,比如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
相关推荐
Java核心技术+卷I+基础知识(原书第10版)高清 中文 完整版 PDF 免费下载 特别清晰 带书签
1、赋值顺序不同 ++ i 是先加后赋值;i ++ 是先赋值后加;++i和i++都是分两步完成的。 因为++i 是后面一步才赋值的,所以它能够当作一个...形象的理解可以是i++先做别的事,再自己加1,++i先自己加1,再做别的事情。
《JAVA核心技术(卷1):基础知识(原书第9版)》是《Java核心技术》的最新版,《Java核心技术》出版以来一直畅销不衰,深受读者青睐,每个新版本都尽可能快地跟上Java开发工具箱发展的步伐,而且每一版都重新改写了的...
Java 核心技术 卷1 Index Chapter 1: An Introduction to Java 1 Java As a Programming Platform 2 The Java “White Paper” Buzzwords 2 Java Applets and the Internet 7 A Short History of Java 9 ...
《Java 基础核心总结》 Java 概述 什么是 Java2 Java 的特点Java 开发环境 JDK JRE Java 开发环境配置 Java 基本语法 数据类型基础语法运算符 Java 执行控制流程条件语句 if 条件语句 if...else 条件语句if...else ...
本文主要讲了为什么(i++)不能做左值,而(++i)可以的原因,希望对你的学习有所帮助。
Java核心技术 卷I基础知识(原书第8版) ,完全版,共14章,分为2个部分,还需下载另外一个部分,另一部分为Java核心技术卷+2+高级特性+原书第8版
Apple、 HP、 IBM、 MicroSoft、 Novell、 SGI、 SCO、 Tandem 等 公 司均计 划 将 Java并入 各 自 开 发 的 操 作系 统 ,而 负 责 开 发 并 推 广 Java技 术 的 SunSoft公司 (这 是 SUN下 属的 一 个 子 公 司 ), ...
《Java核心技术》出版以来一直畅销不衰,深受读者青睐,每个新版本都尽可能快地跟上Java开发工具箱发展的步伐,而且每一版都重新改写了部分内容,以便适应Java的最新特性。本版也不例外,它反映了Java SE 6的新特性...
i + i++ ; i i + i ++ ; 2 i + ++i ; i i + ++i ; 3 i + i + i; i i + i + i 3 i + ++i + i ; i i + ++i + i ; 5 i + ++i + ++i ; i i + ++i + ++i ; 6 i i +++ i; i i ++ + i; 3 i i i; i i i; 1 一个等号是赋值...
JAVA2核心技术第7版 卷I:基础知识 中文版+英文版+源码.part2
CSDN有上传文件大小限制,《Java核心技术 卷I 基础知识 第9版》分成了两个压缩文件上传,分别是: Java核心技术 卷I 基础知识 第9版.zip.001 Java核心技术 卷I 基础知识 第9版.zip.002
JAVA2核心技术第7版 卷I:基础知识 中文版+英文版+源码.part5.rar
JAVA2核心技术第7版 卷I:基础知识 中文版+英文版+源码.part3.rar
JAVA2核心技术第7版 卷I:基础知识 中文版+英文版+源码.part4.rar
java核心技术 卷I 基础知识 原书第八版 java核心技术 卷I 基础知识 原书第八版
java基础题,对初学者有很大的帮助。初学者可以根据自己学到的知识融合习题
Java2核心技术I卷.基础知识7th.part1.rar (解压需5个文件part1,part2,目前一次只能上传70M,不得不分卷,希望大家谅解下)
Java核心技术卷+2+高级特性+原书第8版,完全版,共14章,分为2个部分,还需下载另外一个部分,另一部分为Java核心技术 卷I基础知识(原书第8版)
2020年Java基础知识篇,java基础会考察的一些问题,语法、面向对象,集合,异常,多线程,I\O流等等