A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 付凯鹏 中级黑马   /  2013-11-17 21:02  /  1375 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

大家把i++和++i给我讲解一下,现在变得有点迷糊、、、、最好举个例子讲解

6 个回复

倒序浏览
i++就是语句执行完毕以后补做一个i=i+1的赋值

++i就是在语句执行之前执行一个i=i+1语句

举个例子:
  1. class Demo
  2. {
  3.         public static void main(String[] args) {
  4.                 int m=0;
  5.                 for(int i=0;i<5;i++)
  6.                 {
  7.                         System.out.println(m++);
  8.                 }
  9.        
  10.         }

  11. }
复制代码
输出结果:0 1 2 3 4
  1. class Demo
  2. {
  3.         public static void main(String[] args) {
  4.                 int m=0;
  5.                 for(int i=0;i<5;i++)
  6.                 {
  7.                         System.out.println(++m);
  8.                 }
  9.        
  10.         }

  11. }
复制代码
输出结果: 1 2 3 4 5



评分

参与人数 1技术分 +1 收起 理由
黄炳期 + 1

查看全部评分

回复 使用道具 举报 1 0
class Test{
        public static void main(String[]args){
                int a=0;
                System.out.println(a++);//打印结果是0,但是此后的a已经等于1了。(先用后加1)
                //注意:此时a等于1了。
                System.out.println(++a);//打印结果是2,此后的a等于2。(先加1后用)
                a++;//这是个式子,这式子完成后此后的a等于3了。
                System.out.println(a);//打印结果是3。
                ++a;//同理这也是个式子,这个式子完成后的a等于4了。(无论++在前和在后式子完成后a都加1了。)
                System.out.println(a);//打印结果是4.
                //综合练习
                int b=a++ + ++a;/*结果b=10。解析:此式子相当于int b=(a++)+(++a)接着算int b=4+6=10。其中a++遵循先用后加1所以参加运算的是4,
                但这个式子(a++)结束了此时a已经加1了所以此后的a=5;然后接着算++a遵循先加1后运算所以参加运算的是5+1=6,所以最终结果是b=10。
                此后的a等于6了。*/
                System.out.println("b="+b+";        a="+a);
                /*总结:
                        1.a++先用后加1
                        2.++a先加1后用
                        3.无论++在前和在后式子完成后a都加1了。*/
                }
        }

评分

参与人数 1技术分 +1 收起 理由
黄炳期 + 1

查看全部评分

回复 使用道具 举报
       1 首先两者的区别是:前者是先赋值,然后再自增;后者是先自增,后赋值

       2 ++i和i++都是分两步完成的。因为++i 是后面一步才赋值的,所以它能够当作一个变量进行级联赋值,++i = a =b,即 ++i 是一个左值(可被寻址的值);i++ 的后面一步是自增,不是左值.

       3  ++i 和i++ 的使用,一般来说在循环域里面,这两者并没有什么很大的区别,因为编译器一般都会给你做优化。但是要注意其生存周期,以及很难察觉的写脏,就好像指针delete以后一定要赋予0一样,我们要注意i值在程序流中的变化。

       4  i=1 ; j=(++i)+(++i)+(++i); printf("J=%d/n",j); 这个结果是什么?没有结果,因为不同的编译器做出来的结果,我用vc6和gcc出来的结果是一样的,但是我坚信这么多不同编译器的优化规则都会导致这个怪异的结果。回过头来,这样coding,你会疯掉的,左手logic,右手biology千万别走火入魔!

       5 我们来看看在++行为上表现迥异的c++程序和java程序

test.java

public class test{

          public static void main(String args[]){

                int i = 0 , j ;

                for(j=0;j<5;j++){

                      i=i++; System.out.println("i="+i);

                }

         }

}

test.c

#include<stdio.h>

main(){

  int i = 0 , j ;

  for(j=0;j<5;j++){

     i=i++ ; printf("i=%d/n",i);

  }

}

test.java的结果是 i=0 i=0 i=0 i=0 i=0, test.c的结果是 i=1 i =2 i=3 i=4 i =5

评分

参与人数 1技术分 +1 收起 理由
黄炳期 + 1

查看全部评分

回复 使用道具 举报
i++和++i  不赋值时候 是一样的 没区别   如果赋值 i=o      t=i++或t=++i  有区别    t=i++  先赋值 (=)后++      。。。t=++i   先(++) 后赋值 (=)     记住 i 前先碰到 那个符号 那个符号先进行运算
回复 使用道具 举报
i++是在赋值之后运算的,而++i是在运算之后赋值的。
回复 使用道具 举报
这个地方也不太清楚,受教了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马