今天在百度知道上看到别人提的一个问题,主要是不明白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=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...
通过反编译出java虚拟机指令来看执行i=i++时内存中到底做了什么了?
⽰例: 输⼊: 38 输出: 2 解释: 各位相加的过程为:3 + 8 = 11, 1 + 1 = 2。 由于 2 是⼀位数,所以返回 2。 ⾃⼰当时想的解法(但⽤了循环和判断) class Solution(object): def addDigits(self, num): while True:...
这个布局是一个常规布局,我就不解释了。 MainActivity.Java,关键地方都有注释 public class MainActivity extends Activity { private SwipeListView mSwipeListView ; private SwipeAdapter mAdapter ; ...
示例 1:输入: 2输出: 1解释: 2 = 1 + 1, 1 × 1 = 1示例 2:输入: 10输出: 36解释: 10 = 3 + 3 + 4, 3 ×
给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。 子序列 是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7...-104 <= nums[i] <=104
解释: 对于 nums[0]=8 存在四个比它小的数字:(1,2,2 和 3)。 对于 nums[1]=1 不存在比它小的数字。 对于 nums[2]=2 存在一个比它小的数字:(1)。 对于 nums[3]=2 存在一个比它小的数字:(1)。 对于 nums[4...
设定栈的抽象数据类型定义: ADT stack{ 数据对象:D={ai"ai CharSet,i=1,2...,n,n>0} 数据关系:R1={,ai>"ai-1,ai D,i=2,...,n} 基本操作: Initstack(&s) 操作结果:构造一个空栈s. Push(&s,e) 初始条件:栈s已...
数组的每个索引做为一个阶梯,第 i个阶梯对应着一个非负数的体力花费值 cost[i](索引从0开始)。 每当你爬上一个阶梯你都要花费对应的体力花费值,然后你可以选择继续爬一个阶梯或者爬两个阶梯。 您需要找到...
# 问题描述 # 将字符串 "PAYPALISHIRING" 以Z字形排列成给定的行数: # P A H N # A P L S I I G # Y I R # 之后从左往右,逐行读取字符:"PAHNAPLSIIGYIR" ...# 解释: # P I N # A L S I G # Y A H R # P I
在三叶草ℂ3的具体示例中给出了轮廓函数,熵密度,BPS增长率和颤动的相结构的显式计算,并解析了Ci \ mathcal {C} $$颤动的混合曲线。 最后,获得了Hirzebruch F $$ \ mathbb {F} $$ 0的BPS增长率,以及ℂ3/ℤ2×ℤ...
力扣热题Python源代码 ... 解释:左下角的橘子(第 2 行, 第 0 列)永远不会腐烂,因为腐烂只会发生在 4 个方向上。 提示: m == grid.length n == grid[i].length 1 <= m, n <= 10 grid[i][j] 仅为 0、1 或 2
解释:11 = 5 + 5 + 1 示例 2: 输入:coins = [2], amount = 3 输出:-1 示例 3: 输入:coins = [1], amount = 0 输出:0 示例 4: 输入:coins = [1], amount = 1 输出:1 示例 5: 输入:coins = [1], amount = ...
先修课程按数组 prerequisites 给出,其中 prerequisites[i] = [ai, bi] ,表示如果要学习课程 ai 则 必须 先学习课程 bi 。 例如,先修课程对 [0, 1] 表示:想要学习课程 0 ,你需要先完成课程 1 。 请你判断是否...
基于 TypeScript 编写的 JavaScript 解释器,运行于es的环境,且原生支持es6\jsx等众多常用的新特性。独立、安全。 初版fork于,目标是原生支持es2017(非严格)语法和JSX且修改bug,持续开发中,进度请查看最后的 ...
leetcode 走踏板Leetcode问题 这些是 ...问题的已接受提交 70. 爬楼梯: 你在爬楼梯。 需要n步才能到达顶部。...解释:有两种方法可以爬到顶部。...解释:有三种方法可以爬到顶部。...nums[i] ...2*i(0 ...解释:数组
解释:答案是“abc”,长度为 3。 解决方案 Python3:类解决方案: def lengthOfLongestSubstring(self, s): dicts = {} maxlength = start = 0 for i,value in enumerate(s): # "abcabcbb" # "bbbbb" if value in ...
给定不同面额的硬币 coins 和一个总金额 amount。...用dp[i] 来表示组成i块钱需要最少的硬币数,每个面值的硬币可以拿任意个,因此对于每一个 dp[i] 我们都遍历一遍所有面值,看要不要再拿一个这个面值的