刚刚学习C#的时候,难免会遇到一些麻烦,而我觉得最有意思的是i++和++i。先介绍下它们吧!!

i++ 俗称后加加:在处理运算的时候先不做运算,等输出的时候再加,这是我个人的理解。++i 俗称先加加

:在处理运算的时候先加。

然后做相应的运算下面来看几个例子:

(1)

int i = 1;
i++;
Console.WriteLine(i);

最后结果:2

(2)

int i = 1;
++i;
Console.WriteLine(i);

结果:2

结论:从(1)(2)看出不管是i++还是++i输出最后的结果都是经过计算的。

(3)

int i = 1,j = 2,sum;
sum = j + i++;
Console.WriteLine(i);
Console.WriteLine(sum);

结果:2 3

(4)

int i = 1,j = 2,sum;
sum = j + ++i;
Console.WriteLine(i);
Console.WriteLine(sum);

结果:24
结论:i++在运算的时候先不做计算,等运算结束后在做加计算。++i在运算的时候就已经做了加计算。

是不是瞬间明白了,接下来是最经典的部分了:(i++)+(i++)、(i++)+(++i)、(++i)+(++i)

(5)

int i = 1, j = 1;
j = (i++) + (i++);
Console.WriteLine(i);
Console.WriteLine(j);

结果:33

(6)

int i = 1, j = 1;
j = (i++) + (++i);
Console.WriteLine(i);
Console.WriteLine(j);

结果:34

(7)

int i = 1, j = 1;
j = (++i) + (++i);
Console.WriteLine(i);
Console.WriteLine(j);

结果:35

结论:上面这三个例子更明显的看出,加加在前和加加在后的区别!(PS:当然有新手看不明白,

没关系。首先是两个括号,括号的运算级别比加号高,所以先算括号里面的。加号运算符的执

行顺序是从左到右。所以执行顺序是:( 1 )+( 2 ),+号是最后运算的。拿第一个举例吧,

j=(i++)+(i++) ,第一个(i++)加加在后,先不做运算,所以i=1,结束第一个后,到了第二个(i++)

的时候i已经做出了计算i=2(ps:因为上一个的i++不做计算,执行完了那个运算再做计算),

第二个(i++),此时的i同样不做计算,i=2,然后计算加法j=1+2,此时的i=3,输出结果:i=3,j=3)。

执行效率:

i++在执行的时候会在内存中复制一个副本执行+,实际i的值在执行的时候是没有执行+的,等到该语句执行完,再把这个++执行结果赋值给这个i,然后在内存中回收这个副本。

++i是直接执行这个++,不会有内存复制的开销

测试:

static void Main(string[] args)
{Stopwatch sw1 = new Stopwatch();sw1.Start();int i1 = 0;while (i1 < 1000000000){i1++;}sw1.Stop();TimeSpan ts1 = sw1.Elapsed;Console.WriteLine("i++总共花费" + ts1.TotalMilliseconds + "ms.");Stopwatch sw2 = new Stopwatch();sw2.Start();int i2 = 0;while (i2 < 1000000000){++i2;}sw2.Stop();TimeSpan ts2 = sw2.Elapsed;Console.WriteLine("++i总共花费" + ts2.TotalMilliseconds + "ms.");Console.Read();
}
i++总共花费2677.6881ms.
++i总共花费2520.9784ms.

总结:我相信看完这么写经典的例子后,入坑的同学已经有了一定的理解。在实际情况中,

不同的编译器不同的语言中,后面三个例子的最后结果是不相同的,所以,在实际开发

中避免这种现象出现!

注:i--和--i原理一样

C#中的i++和++i相关推荐

  1. GNU Make 使用手册(于凤昌中译版)

    GNU Make 使用手册(中译版) 翻译:于凤昌 GNU make Version 3.79 April 2000 Richard M. Stallman and Roland McGrath 1 ...

  2. 面试:第十二章:所有总结

    Java基础 java基本类型哪些,所占字节 byte :1个字节 short :2个字节 char :2个字节 int :4个字节 long :8个字节 float :4个字节 double :8个 ...

  3. linux内核分析(转自某位大哥网上的笔记)

    启动 当PC启动时,Intel系列的CPU首先进入的是实模式,并开始执行位于地址0xFFFF0处的代码,也就是ROM-BIOS起始位置的代码.BIOS先进行一系列的系统自检,然后初始化位于地址0的中断 ...

  4. golang通过RSA算法生成token,go从配置文件中注入密钥文件,go从文件中读取密钥文件,go RSA算法下token生成与解析;go java token共用

    RSA算法 token生成与解析 本文演示两种方式,一种是把密钥文件放在配置文件中,一种是把密钥文件本身放入项目或者容器中. 下面两种的区别在于私钥公钥的初始化, init方法,需要哪种取哪种. 通过 ...

  5. 总结一下在使用某里云服务器的过程中出现过的一些问题

    此文总结在使用阿里云的过程中出现过的问题   想起来就记录一下 本人为言行负责! 海内选择腾讯华为,共勉! k8s不同命名空间的配置文件串掉了 k8s集群服务器购买上后,无法使用外网.连续购买了4台然 ...

  6. Kubernetes 中 设置pod不部署在同一台节点上

    在k8s中,节点的调度主要由亲和性和污点来进行控制的.   而在亲和性部分由分为了节点亲和性和节点反亲和性.   节点亲和性是指在pod部署时,尽量(软策略)或者必须满足(硬策略)部署在某些节点上. ...

  7. 在Dockerfile中设置G1垃圾回收器参数

    在Dockerfile中设置G1垃圾回收器参数 ENV JAVA_OPTS="\ -server \ -XX:SurvivorRatio=8 \ -XX:+DisableExplicitGC ...

  8. 在kotlin companion object中读取Bean,注入Bean对象

    在kotlin companion object中读取Bean,注入Bean对象 在使用kotlin时,或多或少地会使用到一些公共组件,如 http. mongo. redis相关的组件.   使用组 ...

  9. 在k8s中使用gradle构建java web项目镜像Dockerfile

    在k8s中使用gradle构建java web项目镜像Dockerfile FROM gradle:6-jdk8 AS build COPY --chown=gradle:gradle . /home ...

  10. 数据库中自定义排序规则,Mysql中自定义字段排序规则,Oracle中自定义字段排序规则,decode函数的用法,field函数的用法

    数据库中自定义排序 场景:有一张banner表,表中有一个status字段,有0, 1, 2三个状态位,我想要 1,0,2的自定义排序(这里是重点),然后再进行之上对sequence字段进行二次排序( ...

最新文章

  1. pandas.DataFrame删除/选取含有特定数值的行或列实例
  2. JDBC在getConnection之前为什么要调用Class.forName
  3. google nexus5x 刷机抓包逆向环境配置(一)
  4. Vue.js 技术揭秘学习 (3) render
  5. Qt控件与按钮颜色透明
  6. JavaOne 2016 Essentials:7个您不容错过的事件和会话
  7. 您基于JEE的Web项目的结构是什么?
  8. 第一次作业-李纯锐201731084433
  9. 是网关吗_智能家居网关功能这么多,你都知道吗?
  10. 快速搭建springmvc+spring data jpa工程
  11. 【华为云技术分享】Python大神编程常用4大工具,你用过几个?
  12. 3件Unreal Engine 3不得不说的故事
  13. 费诺编码c语言实验报告,formal parameter 4 different from declaration
  14. 电子设计大赛-信号源类题目分析
  15. IE5,IE6,IE7,IE8的css兼容性列表
  16. python图片转黑白_Python 批量转化彩色图片为黑白图片
  17. 用户行为分析——AARRR 模型 和RARRA模型
  18. 看似“冰山美人”的弦图竟如此平易近人!
  19. prometheus监控zookeeper
  20. U盘中的数据被格式化了怎么恢复?原来数据恢复也很简单

热门文章

  1. (数据库系统概论|王珊)第四章数据库安全性:习题
  2. 数组经典题之杨辉三角变形
  3. 2-1:配置与环境之环境
  4. Java 线程实例二(终止线程、生产者/消费者问题、获取线程状态、获取所有线程、查看线程优先级、中断线程)
  5. 网络请求中常见的加密机制和加密算法理解
  6. Redis 与 set(无序集合) 相关的常用命令
  7. ROS kinetic外接Realsense D435i跑ORB_SLAM2教程
  8. Chromium CEF 2623 -- 支持 xp 的最后一个版本源码下载和编译步骤
  9. Data intensive Application (1)
  10. oracle 导入导出指定表