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

javai++ 和 ++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编译器会重新为变量分配一块新内存空间,用来存放原来值, 而完成赋值运算之后,这块内存会被释放。...(1)对于j = i++情况 ?   ...i原始值存放在后开辟内存,最后将这个值赋给j,进行j = i++运算之后,j会得到i值,而i又将自加,所以,在释放内存之后,原来存放j和i地方将得到值分别是:j(此时值等于初始i值)和i...(i自加后值)。...每一次循环结束,用来保存i原始值内存数据会被销毁,然后i值又会被放在一段新内存,在进行上述循环,所以最终能够实现j数据增加。 (2)对于i = i++情况 ?

1.2K100
您找到你想要的搜索结果了吗?
是的
没有找到

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

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

1.6K50

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

"i="+i); System.out.println("j="+j); System.out.println("k="+k); } } 你能肯定并且准确说出你答案吗...其中一个方法对应一个栈帧 此题目我们只需要用到栈帧里面的局部变量表和操作数栈 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++和++i联系区别!超详细原理分析!

关于 i++ 和 ++i 区别,稍微有经验程序员都或多或少都是了解,为了文章完整性,本文也通过实例来简单地解释一下。...上面的例子可以看到,无论是 i++ 和 ++i 指令,对于 i 变量本身来说是没有任何区别的,指令执行结果都是 i 变量值加 1。而对于 j 来说前 ++ 和后 ++ 结果却不一样了。...2) 2. i++ 和 ++i 实现原理 接下来让我们深入到编译后字节码层面上来了解 i++ 和 ++i 实现原理,为了方便对比,将这两个指令分别放在 2 个不同方法执行,源代码如下: /**...正常来讲,执行结果应该是:i = 1,实际结果却是:i = 0,这多少会让人有些诧异。为什么会出现这种情况呢?我们来从编码后代码找答案。...和上面上面的两端代码唯一差别就是 i++ 结果有没有赋值给 i ,但是输出 i 结果一个加了1,而1个没有加。这是为什么呢?

1.2K40

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

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

89630

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

只是一个简单赋值操作 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 。...; System.out.println(i); // 结果:i = 2 } } 最后最后:本文思考过程和计算推导仅针对Java语言。

1.5K10

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

先看一段代码: int i = 0; int a = i++; sout("a值是:"+i); sout("i值是:"+i); 最终编译之后核心字节码如下 L0 BITPUSH 0 //将常量...0压入操作栈 ISTORE_1 //将当前栈顶元素,弹出并保存到局部变量表slot_1 L1 ILOAD_1 //从局部变量表第一个slot槽,取出该值,压入操作栈顶 IINC 0,1...//直接将slot槽值自增(+1)操作,注意此时是当前栈无关 ISTORE_2 //将当前栈顶元素,弹出并保存到局部变量表slot_2 L2 ILOAD_2 //从局部变量表第二个...slot槽,取出该值,压入操作栈顶 IRETURN //返回栈顶元素 这里有两个注意点: IINC 自增操作,并未影响当前栈顶元素,并且 slot_1 元素自增完成后,已经由0变成了1...//从局部变量表第二个slot槽,取出该值,压入操作栈顶 IRETURN //返回栈顶元素 最终输出结果为: a值是: 1 i值是: 1; 总结 i++ 和 ++i 在理论上区别

38320

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

代码实现 public class OperandStackTest { /** 程序员面试过程, 常见i++和++i 区别 */ public static void...V 146: return 解释以上运行结果 第一类问题 对应指令为 先将i1值为10入栈(bipush),然后将int类型值从栈存到局部变量表0位置,然后执行iinc将0...位置值+1,然后将局部变量表0位置数入栈执行输出操作 所以i1值为11 先将i2值为10入栈(bipush),然后将int类型值从栈存到局部变量表1位置,然后执行iinc将1位置值+1,...然后将局部变量表1位置数入栈执行输出操作 所以i2值为11 总结 由于没有赋值操作,区别不大。...i9加一 此时i9=10+1+1为12,然后将8位置i9入栈,执行add将栈i9相加,得到值存储到局部变量表9位置 所以i10=10+12(i9++后还是10,++i9后是12,因为执行了两次

73530

酷睿i3 i5 区别

i3 i5 区别是什么?这两代CPU区别大不?i3 i5这两代CPU各自优点及不足。i3都是双核四线程i5也都是双核四线程。其实,i3和i5最大区别就是睿频,睿频是什么呢?...另外,i5高端 5xx  25xx在指令集支持略有差异,非常适合商业用途。 另外,其集成显卡性能更强。     睿频是一种什么技术呢?...比如最底主频酷睿i5-430M,当使用过程激发睿频加速功能时,处理器速度可由原来2.26GHz最高提升至2.53GHz。...Core i3最大特点是整合GPU(图形处理器),也就是说Core i3将由CPU+GPU两个核心封装而成。由于整合GPU性能有限,用户想获得更好3D性能,可以外加显卡。...它和Core i7(Bloomfield)主要区别在于总线不采用QPI,采用是成熟DMI(Direct Media Interface),并且只支持双通道DDR3内存。

1.3K20

短文:用字节码解析i++和++i区别

本地变量表,就是保存了方法变量,比如第0位置args参数,第1位置i参数。操作数栈你可以理解对数据进行压栈出栈操作。 bipush 8就是把8压到操作数栈。...istore_1就是操作数栈出栈,存到本地变量表第1位置i,就是代码i = 8; iload_1,就是变量表第一个位置i压栈到操作数栈顶,此时栈顶为8 iinc 1 by 1,就是变量表第一个位置...i加1,那么变量表最终i=9 istore_1,又把栈顶8存回了变量表i,那么i=8; 因为java代码又赋值给了i。...0 bipush 8 把8压到操作数栈 2 istore_1 操作数栈出栈,存到本地变量表第1位置i,就是代码i = 8; 3 iinc 1 by 1 变量表第一个位置i加1,那么变量表最终...i=9 6 iload_1 变量表第一个位置i压栈到操作数栈顶,此时栈顶为9 7 istore_1 又把栈顶9存回了变量表i,那么i=9; 8 getstatic #2 <java/lang

78720

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

代码实现 public class OperandStackTest { /** 程序员面试过程, 常见i++和++i 区别 */ public static void...V 146: return 请输入标题 第一类问题 对应指令为 先将i1值为10入栈(bipush),然后将int类型值从栈存到局部变量表0位置,然后执行iinc将0位置值...+1,然后将局部变量表0位置数入栈执行输出操作 所以i1值为11 先将i2值为10入栈(bipush),然后将int类型值从栈存到局部变量表1位置,然后执行iinc将1位置值+1,然后将局部变量表...1位置数入栈执行输出操作 所以i2值为11 总结 由于没有赋值操作,区别不大。...i9,在将8处i9加一 此时i9=10+1+1为12,然后将8位置i9入栈,执行add将栈i9相加,得到值存储到局部变量表9位置 所以i10=10+12(i9++后还是10,++i9后是12

28020
领券