`
E,我卡了
  • 浏览: 30310 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

解释:i=i++

阅读更多
今天在百度知道上看到别人提的一个问题,主要是不明白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++也能解释通了。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics