`
nannan408
  • 浏览: 1783867 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

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);
  }
  2.

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

3.

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

 4.

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

 

  自己可以先运行看看,答案是:0,100,98,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.

1
2
分享到:
评论
2 楼 nannan408 2011-11-13  
promzaid 写道
第一个不是很理解

m=m++;

分解成

m=m;
m=m+1;

1.主要是这种先自加再赋值的情况很少用,它保留了c语言的对于自加的运算顺序(世界上是先有c语言,诞生于1971年,再有java,诞生于1990年)。这种运算顺序就是,如果又有自加,又有等号赋值,那么必须分两种情况:(1)m++,m在前,这种是先用再加
                                        (2)++m,+号在前,这种是先加再用。
第一个例子属于第一种情况,是先用再加
                          m=m  ;//此步是真正赋值,已经实现赋值,不管后面了
                      m=m+1; //此步只是实现自加效果,并没有赋值。

2.这个问题产生的根源是等号和自加用在了一起,单独的m++,和++m,m的值一定会改变的,一定是m=m+1。但是无论m=m++,m=++m,都已经不在是单纯的关系运算和赋值运算了,这个属于约定的逻辑运算,只要知道运算顺序,就好办了。运算顺序就是
                                        (1)m++,m在前,这种是先用再加
                                        (2)++m,+号在前,这种是先加再用。
1 楼 promzaid 2011-11-07  
第一个不是很理解

m=m++;

分解成

m=m;
m=m+1;

相关推荐

    java语言--大学论文.doc

    因此,Java应用软件能在相当小的系统之上独立工作。 2. 平台独立性:这是Java最吸引人的地方。由于它采用先编译成中间码(字节码),然后装载与校验,再解释成不同的机器码来执行,即“Java虚拟机”的思想,“屏蔽...

    20210301-东吴证券-“技术分析拥抱选股因子”系列研究(五):CPV因子移位版,价量自相关性中蕴藏的选股信息.pdf

    东吴证券研究所发布的这份题为“技术分析拥抱选股因子”系列研究的第五篇报告,深入探讨了基于价量关系的选股因子,尤其是CPV因子的移位版,以及价量自相关性中蕴藏的选股信息。 首先,报告前言部分概述了该研究...

    20210302-申万宏源-万科A-000002-龙头重返荣耀,多元价值蕴藏.pdf

    本篇证券研究报告由申万宏源发布,日期为2021年3月2日,详细分析了万科A在不同业务领域的经营状况及其价值,并提出了投资建议。 首先,报告重点探讨了万科A在住宅开发领域的核心竞争力。作为国内房地产行业的龙头...

    写给大忙人看的java核心技术

    以全局高度提炼语言精髓,以高浓度、高含金量的方式对Java 8新特性进行细致讲解,将其沉浸于Java多年的真知灼见蕴藏于书中,既扎实覆盖Java编程的基础知识,更独具匠心地从Java 8极其重要的新特性之一lambda表达式发...

    java毕业论文范文3篇.pdf

    因此,Java 语言被美国著名杂志 PC Magazine 评为 1995 年十大优秀科技产品(计算机类仅此一项入选)之一,随之大量出现了用 Java 编写的软件产品,受到工业界的重视与好评,认为 "Java 是八十年代以来计算机界的一...

    写给大忙人看的Java核心技术 高清(带目录)PDF

    以全局高度提炼语言精髓,以高浓度、高含金量的方式对Java 8新特性进行细致讲解,将其沉浸于Java多年的真知灼见蕴藏于书中,既扎实覆盖Java编程的基础知识,更独具匠心地从Java 8极其重要的新特性之一lambda表达式发...

    写给大忙人看的Java核心技术.[美]Cay S. Horstmann(带详细书签) PDF 下载 高清 完整版

    以全局高度提炼语言精髓,以高浓度、高含金量的方式对Java 8新特性进行细致讲解,将其沉浸于Java多年的真知灼见蕴藏于书中,既扎实覆盖Java编程的基础知识,更独具匠心地从Java 8极其重要的新特性之一lambda表达式发...

    全市场教育行业策略报告:解锁新高考改革“3+1+2”模式下蕴藏的机会-0507-安信证券-20页.pdf

    这一模式自2018年起在河北、辽宁、江苏、福建、湖北、湖南、广东、重庆等八个省市启动试点,并将于2021年高考全面实施。该模式的核心是赋予学生更多的选择权,同时兼顾高校的人才选拔需求。 “3”代表语文、数学、...

    优秀PPT作品欣赏:生活中隐藏的哲理.rar

    优秀PPT作品欣赏之生活中隐藏的哲理,妙手回春作品; 本PPT通过生活总得动物、物品解释生活中蕴藏的一些哲理,这个PowerPoint制作的大气简洁,非常有内涵。 蜘蛛:能坐享其成,靠的就是那张关系网。 气球:只要被...

    2021.03.02-万科A:龙头重返荣耀,多元价值蕴藏-申万宏源-23页.pdf

    【万科A】是中国房地产市场的领军企业,其在住宅开发、物业管理、商业地产、物流地产和租赁住宅等多个领域展现出卓越的经营能力和市场地位。本报告重点分析了万科各业务板块的价值,并给出了投资评级。...

    微信跳一跳 解密 JAVA 代码

    本篇将深入探讨“微信跳一跳”游戏的JAVA代码解密,揭示游戏运行的内在逻辑。 首先,我们要了解JAVA语言在游戏开发中的角色。JAVA是一种广泛使用的面向对象的编程语言,因其跨平台性、高效性和丰富的库支持,常被...

    世界500强面试题-井盖为何是圆的经典案例.docx

    井盖的设计看似是一个日常生活中的小问题,实则蕴藏着深厚的工程学、人类行为学以及安全性考虑。 首先,从几何学的角度来看,圆是一种非常实用的形状。圆形井盖无论从哪个方向放置,都能完美覆盖圆形的井口,这在...

    2015届高考语文人生哲理篇写作素材钻石就在我们的身边

    而2015届高考语文人生哲理篇提供的写作素材“钻石就在我们的身边”,便是这一旅程的指引明灯。它不仅适用于高考学子们的写作,更是每个人都应铭记在心的生活箴言。 从一个国王的故事中,我们看到了智慧的体现。这位...

    万科A-000002-龙头重返荣耀,多元价值蕴藏.rar

    在标题“万科A-000002-龙头重返荣耀,多元价值蕴藏”中,我们可以解读出以下几个关键知识点: 1. **股票代码000002**:这是万科A在深证交易所的股票代码,它代表了万科在中国股市中的身份,投资者可以通过这个代码...

    易观-全民消费背后蕴藏的人群选择-618-27页.pdf

    苏宁智慧零售的精髓在于其线上线下融合的模式,这一模式被称为“两大两小多专”,涵盖了从大型购物中心到社区便利店,再到专业店的多种业态。这种多元化的布局策略使得苏宁能够触及并服务不同层次的消费者。在线上,...

    eclipse-workspace.zip

    "eclipse-workspace.zip"这个压缩包中,蕴藏着丰富的Java学习资源,主要涵盖了Java的基础语法和面向对象编程的核心概念。下面,我们将深入探讨这些关键知识点。 首先,Java基础语法是所有Java开发者的基石。这包括...

    python flask vue-element-admin selenium 爬虫 后台.zip

    在互联网的海洋中,蕴藏着海量的有价值信息。如何合法、高效地获取这些信息?Python爬虫工具与教程为您揭开这一神秘面纱。通过这些资源,您可以轻松地爬取网站信息,提取所需内容,为各种应用场景提供强大的数据支持...

Global site tag (gtag.js) - Google Analytics