世界上往往最复杂的东西,看起来都最简单,比如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
相关推荐
《Core Java Volume I Fundamentals Ninth Edition》是一本关于Java基础知识的书籍,它是第九版。这本书籍的作者是Cay S. Horstmann和Gary Cornell,由Pearson Education公司出版。书籍涵盖了Java编程语言的基础知识...
《Java核心技术 卷 I+卷II 第11版 最新英文版》是Java开发者不可或缺的参考书籍,由Cay S. Horstmann和Gary Cornell两位资深Java专家撰写。这套书籍全面覆盖了Java语言的基础和高级特性,对于深入理解和掌握Java编程...
学习Java包括理解其语法、类与对象、接口、异常处理、多线程、集合框架、I/O流、网络编程等核心概念。同时,Spring框架、MyBatis等企业级开发工具也是Java开发者的必备技能。 2. **Oracle**:Oracle是世界上最流行...
本资源包含“Java基础教程”和相关的课件,是学习Java编程的理想起点。 《Java基础教程》通常会涵盖以下几个关键知识点: 1. **Java环境设置**:安装JDK(Java Development Kit),配置环境变量如JAVA_HOME、PATH...
这是一套Java核心技术基础使用手册,包含Java 基础核心总结、Java核心基础、Java核心知识、Java 基础面试题总结等,内含最强 Java 核心知识点整理及思维导图,需要的朋友可下载试试! Java是一门编程语言,Java发展...
1、赋值顺序不同 ++ i 是先加后赋值;i ++ 是先赋值后加;++i和i++都是分两步完成的。 因为++i 是后面一步才赋值的,所以它能够当作一个...形象的理解可以是i++先做别的事,再自己加1,++i先自己加1,再做别的事情。
《JAVA核心技术(卷1):基础知识(原书第9版)》是《Java核心技术》的最新版,《Java核心技术》出版以来一直畅销不衰,深受读者青睐,每个新版本都尽可能快地跟上Java开发工具箱发展的步伐,而且每一版都重新改写了的...
总的来说,"零基础学Java教程PPT+视频+源代码"是一套全面且实用的学习资源,无论你是完全的新手还是希望巩固Java基础的开发者,都能从中受益。通过系统学习和不断实践,你将能够逐步掌握Java编程,并开启你的编程之...
《Java核心技术 卷I 基础知识(原书第10版)》是一本深入讲解Java编程语言核心概念和技术的经典著作。这本书旨在为初学者和有经验的开发者提供全面而深入的Java SE(标准版)知识,是学习Java开发不可或缺的参考书籍...
Java核心技术是Java程序员学习进阶的关键所在,涵盖了Java语言的基础到高级特性,是理解Java编程思想和实现方法的重要参考书籍。本资源包含了"Java核心技术 卷1+卷2 PDF",为开发者提供了一套完整的Java学习资料。卷...
- 后缀形式:`i++`,先返回变量i的当前值,然后将其加1。 2. 自减运算符(--): - 前缀形式:`--i`,首先将变量i的值减1,然后返回新的值。 - 后缀形式:`i--`,先返回变量i的当前值,然后将其减1。 让我们通过几...
第13章可能涉及到更高级的话题,如多线程或者I/O流,而第4章则可能涉及类和对象的基础知识,包括封装、继承和多态。 "复习提纲.pdf" 是一个关键的学习辅助工具,它通常包含了课程的重点和难点,帮助学生系统地回顾...
- **I/O流**:Java的I/O流系统用于读写文件,包括FileInputStream和FileOutputStream等。在爬虫中用于保存下载的图片,在清除空文件夹时用于读取和检查目录内容。 4. **编程实践**: - **异常处理**:在编写这类...
在Java编程语言中,自增(`++`)和自减(`--`)运算符是非常基础但又十分重要的概念。这两个运算符能够快速地改变变量的值,是编程中经常使用的工具之一。 #### 自增运算符(`++`) 自增运算符`++`的功能是将变量...
《Java 基础核心总结》 Java 概述 什么是 Java2 Java 的特点Java 开发环境 JDK JRE Java 开发环境配置 Java 基本语法 数据类型基础语法运算符 Java 执行控制流程条件语句 if 条件语句 if...else 条件语句if...else ...
### Java技术问题详解:Java + Web + SSH 面试...以上是对Java基础知识中几个重要知识点的详细解释,这些知识点不仅在面试中常见,也是日常开发中经常用到的基础技能。接下来将深入探讨Java Web以及SSH框架的相关知识。
深入学习异常处理、文件I/O操作、集合框架(如ArrayList、LinkedList、HashMap等)也是Java基础中的重要内容。此外,线程和并发编程是Java应用开发中的常见场景,需了解线程的创建与同步机制。 Struts是Java Web...
根据给定文件的信息,我们可以总结出以下Java基础知识点: ### 1. 斐波那契数列 斐波那契数列定义为:`f[0]=1, f[1]=1, f[2]=f[1]+f[1], f[n]=f[n-1]+f[n-2]`。 **代码示例**: ```java public int fibonacci(int...
《Core Java Volume I+II 10th Edition》是Java编程领域的经典教材,全面深入地讲解了Java的核心技术。这套书分为两卷,第一卷主要介绍基础,第二卷则涉及高级特性。以下是对这两个部分的一些关键知识点的详细阐述:...
《Java核心技术》是Java领域的经典教材,它深入浅出地讲解了Java语言的基础知识和核心概念,是许多程序员入门和提升技能的重要参考书籍。本资源包含了《Java核心技术》卷1和卷2的第8版,覆盖了Java语言的全面内容。 ...