`
wnzz95391511
  • 浏览: 126766 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

后缀增量操作符++的问题:j=j++

阅读更多
看《JAVA解惑》的谜题25:
public class Increment {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		int j = 0;

		for (int i = 0; i <= 100; i++) {
			j = j++;
		}

		System.out.println(j);

	}
}

程序打印的结果是0,解释为:j=j++;这一句操作等于如下的操作
int temp = j;
j= j+1;
j= temp;

所以无论程序执行了多少遍,j还是等于0。

而我将这相同的例子转化成C、C++语言去执行,则得到的结果完全不一样。
在C、C++中会得到我们所想象的值:j=100。

不要在单个的表达式中对相同的变量赋值超过一次

PS:前两天写代码,我还真出现了这个问题,写成了j=j++

分享到:
评论

相关推荐

    c++重载递增

    而`operator++(int)`是后缀增量操作符,它返回一个临时对象保存递增前的值。 编译此代码会生成`重载递增.cpp`源文件、`重载递增.exe`可执行程序以及`重载递增.o`目标文件。`cpp`文件包含了源代码,`exe`文件是运行...

    C++操作符详解

    增量操作符(++)和减量操作符(--)有两种形式:前缀形式(如 `++a` 或 `--a`)和后缀形式(如 `a++` 或 `a--`)。前缀形式先改变操作数的值,再返回新值;后缀形式先返回操作数的旧值,然后改变其值。 七、成员访问...

    操作符重载

    5. **性能考虑**:当设计操作符重载时,需要注意性能问题。例如,如果操作符重载涉及复杂的计算或者大量内存操作,应该尽可能优化以避免不必要的资源消耗。 6. **赋值兼容性规则**:确保操作符重载遵循赋值兼容性...

    重载时自增(自减)的前缀和后缀的区别

    1. 前缀自增/自减(如 `++i` 和 `--i`):这种形式的操作符会先执行增/减操作,然后返回更新后的值。也就是说,它返回的是操作后的对象的新值。 2. 后缀自增/自减(如 `i++` 和 `i--`):与前缀形式相反,后缀形式会先...

    探讨++i与i++哪个效率更高

    这是因为当使用后缀增量操作符`i++`时,由于需要返回旧值,程序必须创建一个临时对象来存储当前值,这涉及到额外的内存分配、拷贝构造函数的调用以及在作用域结束时销毁临时对象。例如,`MyInterger` 类的两个重载的...

    实验四:通过栈设计一个计算器程序:.pdf

    4. 在得到后缀表达式后,通过栈对后缀表达式从左向右进行扫描,逐个处理其中的操作数和操作符。 知识点五:中缀、后缀表达式 在计算器程序设计中,涉及两种表达式的转换: 1. 中缀表达式:符合人类常规书写习惯的...

    清华大学 c语言 答案

    代码示例还提供了增量运算符和自增自减操作的例子: ```c int i = 8, j = 10; int m = ++i; int n = j++; ``` 这里展示了前缀和后缀自增自减运算符的用法,以及它们在赋值语句中的效果。 ### 8. 多数据类型混合输出...

    C语言第3版 谭浩强的C语言答案

    2. **前缀和后缀**:`++i` 和 `j++` 的区别在于变量的值何时更新。 3. **输出变量值**:通过 `printf()` 函数输出变量的当前值。 #### 3.12 表达式的计算 此例展示了不同表达式的计算结果。 1. `a += a` → `24` ...

    详解a++和++a的区别

    其次,`a++` 被称为后缀增量操作符。它的行为稍微复杂一些。当 `a++` 被遇到时,它也增加变量的值,但返回的是变量增加之前的旧值。继续以 `a` 为例,如果 `a` 为8,`a++` 会将 `a` 增加到9,但在表达式中,它将返回...

    其他资格考试C语言PPT教案学习.pptx

    - 左值(Left Value)指的是能够出现在赋值操作符左侧的表达式,它通常代表一个存储位置,允许数据存储。例如,变量`a`就是一个左值,因为它可以存储数据(如`int a = 3;`)。 - 右值(Right Value)则是出现在...

    Incrementer

    这个操作符有两种形式:前缀自增(++var)和后缀自增(var++)。这两种形式在执行上有微妙的区别。 前缀自增(++var)首先增加变量的值,然后返回增加后的值。例如: ```csharp int x = 1; int y = ++x; // 这里x先...

    C++程序设计教程4ppt(清华大学 钱能著)

    9. **增量操作**:`++`和`--`操作符可以用于增加或减少变量的值,可以作为前缀或后缀形式使用,前缀形式先改变值再返回,而后缀形式先返回值再改变。 10. **表达式的副作用**:某些操作符如赋值操作符(`=`)除了...

    C语言等级考试题目.doc

    - `%` 操作符具有高于 `=` 的优先级,`a=a+b++,b+a` 等价于 `a = a + (b++), b + a`,而 `b++` 会在整个表达式计算完后执行。 在准备C语言等级考试时,考生需要熟悉这些基本概念,理解各种运算符的行为,以及如何...

    程序设计C语言(1).docx

    ` 执行后,x的值为10,y的值为11,因为后缀自增操作符`++`会在赋值后增加变量的值。 3. 整数除法会向下取整,因此`c3=c1/c2;`的结果是0,选项A正确。 4. C语言中的字符型数据(char)以ASCII码的形式存储,因此选项D...

    suffix tree—后缀树的典型应用

    与完整的后缀树相比,后缀数组占用的空间更少,但仍然能够支持许多相似的操作。 **实现方法:** - 构建字符串的后缀树。 - 通过遍历后缀树,收集每个叶节点对应的后缀起始位置,形成后缀数组。 - 这种方法虽然简单...

    电子科技大学网络教育专科C语言在线考试答案.doc

    - `printf` 函数用于输出格式化的字符串,例子中的输出涉及到后缀增量操作符 `++` 和逗号运算符 `,`。 5. **`break` 语句**: - `break` 语句用于立即跳出最内层的循环,不适用于非循环语句。 6. **循环语句**:...

    chtp8_03答案1

    7. **增量、减量和赋值运算符**:这些是C语言中的基本操作符,如`++`和`--`用于增加或减少变量的值,`=`用于赋值。在表达式中,它们可以被用作前缀或后缀,以改变变量的值。 例如,对于问题3.2,以下四个C语句都...

    搜狐公司_JAVA高级工程师笔试题1

    2. 编译运行代码的结果:这段代码包含多个预增量和后增量操作,它们的执行顺序可能会导致不同的结果。但是,由于没有提供完整的编译和运行环境,我们只能分析代码逻辑。`x--` 在方法调用之前,减去1;`myMethod()` ...

    Java常见面试题(1-5阶段).md

    i++ 是后缀增量操作符,意味着先取得变量的当前值,然后将变量增加1;而++i 是前缀增量操作符,先将变量增加1,然后再取得变量的当前值。这个知识点在循环和条件语句中使用非常频繁。 4. a=a+b 与 a+=b 的区别 这里...

Global site tag (gtag.js) - Google Analytics