今天在百度知道上看到别人提的一个问题,主要是不明白i=i++运算结果,自己之前看过java关于++的细节,不过一时自己也解释不明白,就去查了下java语言规范,才恍然大悟:作文记之!
首先一段代码:
public static void main(String [] args){
int i = 0;
i=i++;
System.out.println("i="+i);
int j = 0;
j=i++;
System.out.print("j="+j+" i="+i);
}
运行结果:
i=0
j=0 i=1
java语言规范里对与++是这样说的:The result of the postfix increment expression is not a variable, but a value.即:++表达式结果是个值,而不是变量。
变量?值?
这是java特殊的地方,对于这里,java有两个存储区,一个是暂存区(堆栈),一个是变量区,
拿“j=i++(i和j初始为0) ”解释下,第一步,把i值存起来,有两个,暂存区:0,变量区:0;第二步:进行i++,i 暂存区还是0,变量区变为1了(也就是说进行完i++后,打印i的值,那么i值为1,打印的是变量的值,即变量区的值,为1没问题)。第三步:进行给j赋值,赋的是i++的值,i++的值是0!为什么呢?之前说了,他是个值,不是变量,那么i++运行完后i++的值就应该从暂存区去取,暂存区存的是0,那么他就是0。i=i++也能解释通了。
分享到:
相关推荐
当它作为后缀(如`i++`)出现在表达式中时,首先返回变量的当前值,然后将变量的值增加1。这种行为可以理解为下面两个步骤: 1. **获取当前值**:首先获取变量`i`的当前值。 2. **增加变量值**:然后将变量`i`的值...
i = i++ 代码分析 在 Java 中,i = i++ 代码的执行结果可能会让人感到意外。下面我们将对这段代码进行详细的分析。 首先,让我们看一下这段代码: ```java int i = 0; i = i++; System.out.println(i); ``` 乍看之...
在Java编程语言中,`i=i++`是一个典型的自增表达式,它的行为可能会引起一些混淆,特别是当对比于其他编程语言如C或C++时。这个表达式在Java中的行为可以通过反编译成Java虚拟机(JVM)指令来理解。 首先,让我们...
i=i+1 goto LOOP_I else goto LOOP_J end end a=0 s="" s2="" l: a=a+1 if a<=8 s=s + "* " s2=s2 + a + " " puts s goto l end puts s2 i=1 L1: if i<=10 j=i*i if j>50 goto L_end else puts i...
然而,`++` 是自增操作符,分为前缀形式(`++i`)和后缀形式(`i++`)。两者的主要区别在于何时增加变量的值: 1. 前缀自增操作符(`++i`):先将变量的值增加1,然后返回增加后的值。 2. 后缀自增操作符(`i++`)...
本教程将详细解释如何通过编程计算这种方程的根,并展示一个具体的Java程序示例。 首先,我们需要了解一元二次方程的解法。最常用的方法是使用韦达定理或求根公式,也称为二次公式: x = [-b ± sqrt(b² - 4ac)] ...
即付年金的现值:P=A[1-(1+i)^-(n+1)]/i+1 或 P=A[P/A, i, n-1]+1 6. 递延年金现值:P=A[1-(1+i)^-n]/i-[1-(1+i)^-s]/i 或 P=A[P/A, i, n]-[P/A, i, s] 7. 永续年金现值:P=A/i 8. 折现率:i=[(F/P)^1/n]-1 第二...
i++) { let complement = target - nums[i]; if (map.has(complement)) { return [map.get(complement), i]; } map.set(nums[i], i); } return []; } // 使用示例 let nums = [2, 7, 11, 15]; let target =...
a=i++; i+=a;` 是一段涉及到变量赋值和自增操作的代码。这段代码包含了几个关键的知识点,我们将逐一深入讲解。 首先,`i=3;` 这一行是初始化一个整型变量 `i` 并赋予其初始值 3。这是在程序开始时定义变量并为其...
以下是对文档中提及的几种查找和排序算法的详细解释: 一、查找算法 1. 顺序查找:顺序查找是最简单的查找方法,它遍历列表中的每个元素,直到找到目标值或遍历完整个列表。普通程序中,`sequefind()` 函数实现了...
本文将详细介绍C++运算符优先级表,并对每个运算符进行解释。 一、括号运算符 括号运算符的优先级最高,包括数组访问、成员访问、预处理器命令和sizeof运算符。例如: * 数组访问:array[4] = 2; * 成员访问:ptr...
在压缩包文件`main.java`中,很可能包含了这段代码的完整实现,可以编译并运行来验证上述解释。`README.txt`文件可能提供了关于代码的额外信息,例如项目背景、目标或使用说明。然而,由于我们只有标题和描述的信息...
3. 多项式回归模型:Y = β0 + β1Xi + β2Xi^2 + … + βPXi^P + μi => X = ln(X),Y = β0 + β1X + β2X^2 + … + βPX^P + μi 4. 半对数模型:ln(Y) = β0 + β1ln(Xi) + μi => Y = e^(β0 + β1ln(Xi) + μi...
以上就是关于`str`类中`+=`和`==`运算符重载的详细解释。通过这种方式,我们可以扩展C++标准库的功能,为自定义类型提供更加直观和便利的操作方式。在`str_operator.cpp`文件中,你会看到这些概念的实现代码。
下面将尝试整理并解释这些物理基础知识: 1. 单位换算: - kg/m³ 和 g/cm³ 的换算关系。1千克每立方米等于0.001克每立方厘米,即1kg/m³ = 1g/1000cm³ = 0.001g/cm³。 - m/s 和 km/h 的换算。1米每秒等于3.6...
统计学是研究数据收集、分析和解释的科学,旨在从数据中提取有价值的信息,并对其进行描述、分析和推断。在统计学中,公式是非常重要的工具,它们可以帮助我们更好地理解和分析数据。下面是统计学中常用的公式: 1....
Java 语言中的 `i=i++` 这个表达式是一个典型的自增运算符使用的例子,它揭示了 Java 编译器处理这种复合赋值语句的机制与 C/C++ 的不同之处。在 Java 中,`i++` 和 `++i` 两者的主要区别在于操作顺序:`i++` 是先...
给定一个含有 n 个正整数的数组...示例 2:输入:target = 4, nums = [1,4,4]输出:1示例 3:输入:target = 11, nums = [1,1,1,1,1,1,1,1]输出:0提示:1 <= target <= 1091 <= nums.length <= 1051 <= nums[i] <= 105