记得刚开始学编程的时候还是从c语言开始的,还是看的谭浩强写的那本书,上面对介绍i++和++i的区别如下:
i++是先赋值,然后再自增;++i是先自增,后赋值。
用代码表示就是:
若 a = i++; 则等价于 a=i;i=i+1;
而 a = ++i; 则等价于 i=i+1;a=i;
那么事实真是这样么,只是曾经我深信不疑,但是直到我看到下面这段代码:
@Test
public void test(){
int i = 0;
i=i++;
System.out.println(i);
}
如果按原先定义,就应该是i=i;i=i+1; 那么结果就应该是1;但是很遗憾结果是0;所以得知原先定义有误,至少是不准确的。
那么真实的机制是怎么样的呢?我简单用代码模拟如下真实流程:
int i;
@Test
public void testAddI() {
i = 0;
i = lastAdd();
System.out.println(i);
i = 0;
i = firstAdd();
System.out.println(i);
}
//模拟i++的机制
public int lastAdd() {
//操作i前对其值保留副本
int temp = i;
i = i + 1;
//返回副本
return temp;
}
//模拟++i的机制
public int firstAdd() {
i = i + 1;
return i;
}
输出结果为0和1,和i=i++以及i=++i的结果一致。
结论:在java的执行过程中,i++和++i都直接对i进行了i=i+1的操作,但是不同的是i++得到的是i未进行加法操作的前的值的副本,而++i直接得到计算后的值。
A: String newPageNumber = "page_number=" + (++j);
B: String newPageNumber = "page_number=" + (j++);
B: String newPageNumber = "page_number=" + (j++);
假如 j = 0;
A的结果为page_number=1
B的结果为page_number=0
转载:https://blog.csdn.net/c15158032319/article/details/78209740
相关推荐
i和i ++i和i++的区别
使用++i和i++可以使迭代操作变得容易,但是两者到底区别在哪可以从这个程序中得知,使用java语言编写
内容概要:本文通过三个版本的示例代码详细介绍了C++中前缀自增++i和后缀自增i++的区别及其具体应用场景。从初学者友好版本逐渐过渡到可选择自增方式的互动版,再到针对数据结构中使用的进阶版本。通过对每个版本的...
i和i
2、我们自定的数据类型,++i效率高于i++,通过运算符重载来给大家说明这一点。 Operator Operator::operator++() { ++value; //内部成员变量 return *this; } Operator Operator::operator++(int) { ...
1. **目标与宗旨**:I++ 工作组的目标是尽快在相关的软件包中全面实施 I++ DME 和 I++ DMS 接口。成员公司放弃了许可费用的权利,并承诺不会对专利法提出任何索赔。 2. **使用自由性**:工作组致力于消除任何限制...
在JavaScript编程语言中,一元运算符`i++`和`++i`是常见的自增操作,它们在处理变量的值时有不同的行为和顺序。理解这两种运算符的区别对于编写高效和无误的代码至关重要。 首先,`i++`称为后置自增运算符。它的...
C++ 中的左值和右值、i++ 与 ++i 的区别 在 C++ 编程语言中,左值(Lvalue)和右值(Rvalue)是两个重要的概念,它们在变量和表达式中的角色不同,理解这两个概念对于编写正确和高效的代码非常重要。 左值(Lvalue...
I++ DME的目标是实现软件包中I++ DME和I++ DMS接口的全面覆盖,并尽可能快地实施这些接口。通过这种方式,可以促进不同制造商之间的测量设备与软件系统的互操作性,降低集成成本,提高生产效率。 - **无许可费用**...
这是一本关于I++DME规范的详细介绍,里面定义了对象模型、类、操作方法等
在C语言中,`++i` 和 `i++` 是两种常见的自增操作符,它们在编程中的作用是增加变量的值。虽然它们看似相似,但在某些特定情况下,两者的行为是有区别的,这也是C语言初学者经常感到困惑的地方。本文将深入探讨这两...
从效率角度来说,i++ 和 ++i 都是 O(1) 的操作,无论是前缀递增还是后缀递增,都不会对性能产生影响。 PHP session 传递方式 在 PHP 中,session 可以通过多种方式来传递,包括 GET 方式、表单隐蔽值方式和文件...
当它作为后缀(如`i++`)出现在表达式中时,首先返回变量的当前值,然后将变量的值增加1。这种行为可以理解为下面两个步骤: 1. **获取当前值**:首先获取变量`i`的当前值。 2. **增加变量值**:然后将变量`i`的值...
在大多数情况下,`++i` 和 `i++` 的效率差异可以忽略不计,因为现代解释器和编译器已经高度优化。然而,如果在循环或复杂表达式中频繁使用,这种微小的顺序差异可能会影响代码的行为。在性能敏感的代码段中,应根据...
i++ :先在i所在的表达式中使用i的当前值,后让i加1 ++i :让i先加1,然后在i所在的表达式中使用i的新值 看一些视频教程里面写for循环的时候都是写 ++i 而不是 i++,上网搜索了一下,原来有效率问题 ++i相当于下列...
内容概要:本文详细介绍了前置自增(++i)和后置自增(i++)运算符的区别及其应用场景,涵盖C/C++、Java、JavaScript等多门语言。重点讨论了两者在返回值、执行顺序以及在复杂表达式中的差异,并探讨了编译器优化的...
"java中的i++和++i的区别详解" Java中的i++和++i是两个非常重要的运算符,它们都是对变量进行自加操作,但是它们的执行顺序和结果却有所不同。 首先, let's 看一下它们的定义: * i++:后加加,先使用变量的当前...
++i和i++都是分两步完成的。 因为++i 是后面一步才赋值的,所以它能够当作一个变量进行级联赋值,++i = a =b,即 ++i 是一个左值;i++ 的后面一步是自增,不是左值。 形象的理解可以是i++先做别的事,再自己加1,+...
Java中i++和++i的详解 Java中的i++和++i是两个常见的运算符,经常出现在面试题中。它们的作用都是将变量i加1,但是它们的执行顺序和返回值却有所不同。 首先,让我们从字节码的角度来看addAfterReturn和...