首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

循环中i ++和++ i之间的区别?

在循环中,i++++i 都是常见的自增操作,但它们的执行顺序和返回值有所不同。

i++ 称为后置自增,它先返回 i 的值,然后将 i 的值加 1。

++i 称为前置自增,它先将 i 的值加 1,然后返回新的值。

在循环中,这两种方式的区别通常不太明显,但在某些情况下,它们可能导致不同的结果。例如:

代码语言:javascript
复制
let i = 0;
let j = i++; // 先给 j 赋值为 i(0),然后 i 的值加 1(变为 1)
console.log(i); // 输出 1
console.log(j); // 输出 0
代码语言:javascript
复制
let i = 0;
let j = ++i; // 先将 i 的值加 1(变为 1),然后将 j 赋值为 i(1)
console.log(i); // 输出 1
console.log(j); // 输出 1

在循环中,这种差异通常不会导致问题,因为循环通常依赖于循环变量的值在每次迭代中发生变化。但是,在某些情况下,这种差异可能会导致问题,因此了解它们之间的区别是很重要的。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

i++ ++i 之间区别详细解释(后缀与前缀)

我看到不少博客对于 i++ ++i 解释都模糊不清,新手看了肯定一脸懵逼,甚至有些人解释是完全错,今天我来给大家详细地解释一下。...两者之间区别吗 let i = 3; const j = i++; let i = 3; const j = ++i; ---- 嗯,是。第一个示例使用后缀增量运算符(i++)。...第二个示例使用前缀增量运算符(++i)。起初,似乎没有什么区别。但是,重要是要了解这里发生事情: 后缀增量运算符使该值递增,并在递增之前返回该值。 前缀增量运算符使值递增,并在递增之后返回值。...是j值不同。因此,重要是要知道postfix(后缀)prefix(前缀)之间微小差异。 顺便说一下,这同样也适用于后缀减量前缀减量运算符(--)。...唯一区别是,--没有增加值,而是减少了值。 这就是所有我要说。我希望我能把区别说清楚了。再见! 最后,不要忘了❤或支持一下哦

89630

java中i++ ++i区别

今天同事扔给我两道面试题,由于我2年前就接触过这道题,所以没啥意思,我看完后扔到一个交流群里,回答这道题绝大部分人竟然都答错了;很多人很清晰知道这两道题想考察面试者对 i++ ++i 理解...,也很清晰知道这二者区别,但是题还是做不对;两道题如下,大家可以先思考一下,给个答案,然后再去验证自己想法。...(这是一道典型看着非常简单题,但是不少人还是会因为粗心栽跟头) 第一题: int a = 0; for (int i = 0; i < 99; i++) {...(int i = 0; i < 99; i++) { b = ++ b; } System.out.println(b); 我估计会有不少人做错...i++ ++i 在理论上区别是: i++:是先把i拿出来使用,然后再+1; ++i :是先把i+1,然后再拿出来使用; 答案见下: 第一题:a=0 第二题:b=99 再升级一下 第三题

1.2K30

java中 i = i++ j = i++ 区别

由于i++i--使用会导致值改变,所以在处理后置++--时候,java编译器会重新为变量分配一块新内存空间,用来存放原来值, 而完成赋值运算之后,这块内存会被释放。...i原始值存放在后开辟内存中,最后将这个值赋给j,进行j = i++运算之后,j会得到i值,而i又将自加,所以,在释放内存之后,原来存放ji地方将得到值分别是:j(此时值等于初始i值)i...每一次循环结束,用来保存i原始值内存数据会被销毁,然后i值又会被放在一段新内存中,在进行上述循环,所以最终能够实现j数据增加。 (2)对于i = i++情况 ?...扩展: 微软windows下visualstudio编译结果java不同,但在gcc等其他c语言编译器下,结果java是一样,千万要注意,由于有些人使用是c语言编译器但不是windows...下编译器,结果仍然java一致,但在windows下编译运行结果却不一样,希望能引起读者注意。

1.2K100

面试官:i = i++ i = ++i 有什么区别

出处:blog.csdn.net/qq_44377709/article/details/106643703 写在前面:前些天看完了JVM内存结构,自以为自己是懂了,心里想想不就是分线程共享线程私有嘛...其中一个方法对应一个栈帧 此题目我们只需要用到栈帧里面的局部变量表操作数栈 2.1、第一步 int i = 1 只是一个简单赋值操作 2.2、第二步 i = i++ 结果:i还是等于1 2.3、第三步...int j = i++ 结果:i在局部变量表中变成了2,操作数栈中 i 值为1,并且将 i 值返回给 j,即此条语句以后,i = 2,j = 1 2.4、第四步 int k = i + ++i *...i++ 结果:局部变量表中i = 4,k = 11 2.5、结果 3、i = ++i 按理说根据上面的分析过程,再来分析 i = ++i,就很简单了。...我们 i 变量先在局部变量表中进行自增,然后再将 i 进栈,然后再把栈中数据返回给我们变量 i

1.2K20

【答疑解惑】i++,++ii+=区别

表达式 a = i++; 它等价于 a = i ; i = i + 1; 表达式 a = ++i 它等价于 i = i + 1; a = i; 1、 首先两者区别是:前者是先赋值,然后再自增;...后者是先自增,后赋值 2、 ++i i++ 使用,一般来说在循环域里面,这两者并没有什么很大区别,因为编译器一般都会给你做优化。...但是要注意其生存周期,我们要注意i值在程序流中变化,如果是for、while循环判断中要特别注意++i值比i++值要提前。...没有结果,因为不同编译器做出来结果,你要纠结这个,哎我只能说那些书上纯粹是搞人。 以上我们只需记住先序后续递增,循环判断时条件即可。...i += 2; 这个是 i = i + 2; 自身值加上2后赋值给自己。这个没有争议。 来骚年练习一下 i += (++i)+(++i)+(++i); 呵呵!!!

1.6K50

图解 i++ ++i 区别!看了必懂

先看一段代码: int i = 0; int a = i++; sout("a值是:"+i); sout("i值是:"+i); 最终编译之后核心字节码如下 L0 BITPUSH 0 //将常量...ISTORE_2 弹出栈顶元素值依旧是0,并未改变 最终输出结果为: a值是: 0 i值是: 1; 我这里画了一个图来帮助大家理解 再来看看++i int i = 0; int a = ++...i; sout("a值是:"+i); sout("i值是:"+i); 对于++i 来说,对应字节码如下,先自增再入栈,那么结果就很清晰了 最终核心编译之后字节码如下 L0 BITPUSH 0...//从局部变量表第二个slot槽中,取出该值,压入操作栈顶 IRETURN //返回栈顶元素 最终输出结果为: a值是: 1 i值是: 1; 总结 i++ ++i 在理论上区别是...: i++:是先把i拿出来使用,然后再+1; ++i :是先把i+1,然后再拿出来使用;

38020

【118期】面试官:你真的清楚 i = i++ i = ++i 区别吗?

来自:blog.csdn.net/qq_44377709/article/details/106643703 写在前面:前些天看完了JVM内存结构,自以为自己是懂了,心里想想不就是分线程共享线程私有嘛...2、分析 在做这道题时我们脑中要有对应JVM内存结构。其中一个方法对应一个栈帧 ? 此题目我们只需要用到栈帧里面的局部变量表操作数栈 2.1、第一步 int i = 1 ?...结果:i在局部变量表中变成了2,操作数栈中 i 值为1,并且将 i 值返回给 j,即此条语句以后,i = 2,j = 1 2.4、第四步 int k = i + ++i * i++ ?...我们 i 变量先在局部变量表中进行自增,然后再将 i 进栈,然后再把栈中数据返回给我们变量 i 。...; System.out.println(i); // 结果:i = 2 } } 最后最后:本文思考过程计算推导仅针对Java语言。

1.5K10

从 JVM 层面理解 i++ ++i 真正区别

前言 如果只用普通知识解释i++++i的话 i++ 先将i赋值再++ ++i 先++再赋值 但是这简单回答并不能入吸引面试官眼球,如果用java字节码指令分析则效果完全不同。...代码实现 public class OperandStackTest { /** 程序员面试过程中, 常见i++++i 区别 */ public static void...然后将局部变量表1位置数入栈执行输出操作 所以i2值为11 总结 由于没有赋值操作,区别不大。...另外,Java 系列面试题答案全部整理好了,微信搜索Java技术栈,在后台发送:面试,可以在线阅读。...另外,关注公众号Java技术栈,在后台回复:面试,可以获取我整理 Java 系列面试题答案,非常齐全。

73030

深入解析i++++i区别及性能影响

这种情况下,我们通常会用到两种常见操作符:i++++i。最近在阅读博客时,我偶然看到了有关i++++i性能讨论。之前我一直在使用它们,但从未从性能角度考虑过,这让我突然产生了兴趣。...尽管它们看起来相似,但它们之间存在微妙而重要区别。在本文中,我们将详细解释i++++i之间区别,以及它们对代码性能影响。...ii.jpg i++ ++i 区别 i++操作符:这是一个后缀自增操作符。它会先使用变量的当前值,然后再将变量值加1。...输出如下: b=4 i=4 区别及适用场景 区别:主要区别在于变量自增时间点不同。对于i++,变量值会先被赋给表达式,然后再自增;而对于++i,变量会先自增,然后再将增加后值赋给表达式。...++i性能影响:相比之下,++i不需要保存原始值,因此它可能会更加高效。它只需一次自增操作。 总结 尽管i++++i操作符看起来很相似,但它们在变量自增时间点上有着微妙区别

45420

从 JVM 层面理解 i++ ++i 真正区别

前言 如果只用普通知识解释i++++i的话 i++ 先将i赋值再++ ++i 先++再赋值 但是这简单回答并不能入吸引面试官眼球,如果用java字节码指令分析则效果完全不同。...代码实现 public class OperandStackTest { /** 程序员面试过程中, 常见i++++i 区别 */ public static void...1位置数入栈执行输出操作 所以i2值为11 总结 由于没有赋值操作,区别不大。...位置,由于是++i所以先iinc将4位置值加一,然后将局部变量表4值入栈,执行赋值操作, 所以i5, i6都是11。...i9,在将8处i9加一 此时i9=10+1+1为12,然后将8位置i9入栈,执行add将栈中i9相加,得到值存储到局部变量表9位置 所以i10=10+12(i9++后还是10,++i9后是12

28020

从JVM层面来解释i++++i真正区别

前言 如果只用普通知识解释i++++i的话 i++ 先将i赋值再++ ++i 先++再赋值 但是这简单回答并不能入吸引面试官眼球,如果用java字节码指令分析则效果完全不同。...代码实现 public class OperandStackTest { /** 程序员面试过程中, 常见i++++i 区别 */ public static void...先将i1值为10入栈(bipush),然后将int类型值从栈中存到局部变量表0位置,然后执行iinc将0位置值+1,然后将局部变量表0位置数入栈执行输出操作 所以i1值为11 先将i2值为...10入栈(bipush),然后将int类型值从栈中存到局部变量表1位置,然后执行iinc将1位置值+1,然后将局部变量表1位置数入栈执行输出操作 所以i2值为11 总结 由于没有赋值操作,区别不大...先将i9=10入栈,然后存在局部变量表8位置 int i10 = i9++ + ++i9; 先iload将8位置i9入栈然后执行iinc将8处i9加一,然后执行++i9,在将8处i9加一 此时

38620

i++++i联系与区别!超详细原理分析!

1. i++++i基本概念 在几乎所有的命令式编程语言中,必然都会有 i++ ++i 这种语法。...关于 i++ ++i 区别,稍微有经验程序员都或多或少都是了解,为了文章完整性,本文也通过实例来简单地解释一下。...上面的例子中可以看到,无论是 i++ ++i 指令,对于 i 变量本身来说是没有任何区别的,指令执行结果都是 i 变量值加 1。而对于 j 来说前 ++ 后 ++ 结果却不一样了。...2) 2. i++ ++i 实现原理 接下来让我们深入到编译后字节码层面上来了解 i++ ++i 实现原理,为了方便对比,将这两个指令分别放在 2 个不同方法中执行,源代码如下: /**...3. i++ ++i 使用一些坑 i++ ++i 在一些特殊场景下可能会产生意想不到结果,本节介绍两种会导致结果混乱使用场景,并剖析其原因。

1.1K40

【sed学习】sed -ised -i -e有什么区别

:ipv4lld_exec:s0' sepolicy/file_contexts不太清楚sed -ised -i -e有什么区别,学习一下 sed -i sed -i -e 是用于编辑文件中匹配模式命令...它们区别在于 -e 选项。 sed -i:直接编辑文件,并将结果写回原始文件中。不需要指定脚本文件。...\New line' file.txt 以上示例展示了 sed -i sed -i -e 之间一些区别,后者可用于更复杂编辑任务。...请根据具体需求选择适合命令选项。 学习使用 sed 命令可以帮助你在文本处理中实现强大编辑转换功能。...学习常见正则表达式语法以及元字符含义,可以帮助你更好地理解应用 sed 命令。 阅读文档教程:sed 官方文档提供了详细命令说明示例。此外,还有许多在线教程博客文章可供参考。

41010

++ii++仅仅是先加1后加1区别吗?

没错,关于二者之间区别,的确可以这么认为,并且按照上面的方法操作,运算中也基本不会有什么错误。但是如果我告诉你,后置++ 其实与前置++一样,在参与运算之前都会将变量加1,你会信吗?...System.out.println("prePlus4:i=" + i); } } 程序并不复杂,就是使用前置++后置++。...,然后才继续计算,,二者之间真正区别是:前置++是将变量值加1后,使用增值后变量进行运算,而后置++是首先将变量赋值给一个临时变量,接下来对变量值加1,然后使用临时变量进行运算,从效果上来讲...j=temp*30; //使用临时变量Temp进行运算,j结果为60 进一步探索 接下来我们来研究一下前置++与后置++区别,为了能更好说明该问题,先列出一个非常简单程序: public class...相当于(j=i) 6: istore_2 //返回 7: return 现在我们已经从指令级别分析完了二者之间差异。 前置++直接将变量值加1,然后使用这个变量值。

1.6K20

i++++i并没有区别,字节码告诉你 | Java Debug 笔记

前言==不管是学习C++时候还是学习java时候我们都被老师灌溉了i++++i不同前者是先赋值在进行+1操作而后者是先进行+1在进行赋值 。...我们也肯定在程序中因为两者使用不当导致我们程序计算错误问题描述====问题是这样!本着先加后加原则就开始盲目的背诵记忆了。一直认为i++ ++i他们执行就是不同。...但是看了字节码才发现具体场景我们这里也不需要进行具体说明了。问题分析====我们直接就对i++、++i 进行分析。对于两者区别我们不用赘述。今天我们从字节码层面来看看两者执行区别对!...所以说理解还是得看底层习以为常区别=======上面我们通过字节码层面展示i++ ++i他们两个是没有区别的。那么我们平时认为区别是什么情况呢对~ 。...我们得赋值结合起来看才能看出中间端倪上面是两段代码两段代码对应字节码。内部却别就是与i++是先ILOAD再IINC .++i是先IINC在ILOAD。

15810
领券