循环小谜题,关于j++的问题

问题描述

publicstaticvoidmain(String[]args){intj=0;for(inti=0;i<100;i++){j=j++;}System.out.println(j);}执行结果是:0解释:执行的顺序是:temp=j;j=j+1;j=temp我想问下这个temp中间变量在执行的时候是不是真是存在的?为什么会是这个执行顺序呢?我一直理解为执行顺序为两步;j=j;j++,到底是怎么了???我反编译.class文件,也没有看到类似temp的变量存在啊?我想知道在堆栈中是如何执行的,跪求大神解释

解决方案

解决方案二:
和你贴的代码不匹配吧
解决方案三:
你见过C++的后缀自增运算符的重载代码吗?某种程度上temp是确实存在的。
解决方案四:
这个问题不注意还真不大容易弄明白。这其实是一个运算符的优先级问题。temp的这个数值肯定存在,但不是你说的那样temp=j;=号的优先级低于++,就是说要先计算++后才会进行=号的计算。“=”计算符原理是将右边的表达式的值赋值给左边的表达式。左边的表达式是j,而右边的表达式是j++;程序先计算右边表达式的值:最开始,j的初始值为j=0;因为++运算符置于变量的后面,说明这个++运算符的计算在整个表达式结果计算出来后。所以此时程序不会去执行++计算,而是去先计算整个表达式的值,因为整个表达式就j一个变量,所以整个表达式的值就是j的值,此时j的值为0;及整个右边的表达式的值为0;此时程序已经计算出整个右边的表达式的值了,此时程序会将这个值存储起来,即用一个temp记录此时右边表达式的值0,temp=0;因为j已经参加完表达式的计算,然后进行++的操作,即j自增。此时j=j+1;即j=1;然后由于运算符优先级的问题,此时才会计算=号运算符,即将右边表达式的值(temp=0)赋值给左边表达式,即此时运行j=temp;而temp=0;所以此时j=0;即最终j的值为0

时间: 2024-12-31 20:08:59

循环小谜题,关于j++的问题的相关文章

c语言-求助一个for循环小问题

问题描述 求助一个for循环小问题 就是那个for循环里面&&ret是什么意思呀?我是大一新生 基础不好 谢谢各位了 解决方案 for循环中一个不容小觑的问题自己的工具类以及for循环的一个问题Oracle 11g r2 for linux(CentOS 6.4) 遇到的两个小问题 解决方案二: &&ret : &&是'且' 的意思 就是说,i<=k,并且ret=true 才执行语句块. 解决方案三: 在循环里判断的依据是布尔表达式.你说的那个是当i&

恳求j2me格式循环小程序

问题描述 大概要做的工作是:在第一屏上设置3个font,Fontfont1=Font.getFont(Font.FACE_SYSTEM,Font.STYLE_PLAIN,Font.SIZE_LARGE);Fontfont2=Font.getFont(Font.FACE_MONOSPACE,Font.STYLE_PLAIN,Font.SIZE_MEDIUM);Fontfont3=Font.getFont(Font.FACE_PROPORTIONAL,Font.STYLE_PLAIN,Font.SI

sql 游标的使用—游标FOR循环小例子_MsSql

例子: 显示emp表所有雇员名及其工资: 复制代码 代码如下: declarecursor emp_cursor is select ename,sal from emp ;beginfor emp_record in emp_cursor loopdbms_output.put_line('姓名: '||emp_record.ename||' , 工资: '||emp_record.sal);end loop;end ;/ anonymous block completed姓名: SMITH

将 Java 小程序迁移到 Microsoft J# 浏览器控件

程序|控件|浏览器 Visual J# .NET 小组 Microsoft Corporation 摘要:通过 Microsoft J# 浏览器控件,开发人员可以将所编写的在 Java 虚拟机上运行的 Java 小程序迁移到 .NET 框架.本文向开发人员介绍 J# 浏览器控件,并说明将 Java 小程序迁移到 .NET 框架的步骤.本文还讨论了其他一些主题,如 J# 浏览器控件的安全性和调试,以及当前版本中不受支持的功能. 下载 HTML 小程序到对象标记转换器 (95KB) 本文假设开发人员

c语言-c++for循环为什么可以这么用?

问题描述 c++for循环为什么可以这么用? for (string str; cin >> str; cout << str << endl); 跟C语言的不一样?比如C语言中for(i = 0;i < 5;i++) 解决方案 #include using namespace std;char msg[] ="Now is the time. ";int main(){ char * cp; int i; for(cp = msg; cp[0

struct-求帮忙看看错在哪里,把输进去的数据从大到小排序

问题描述 求帮忙看看错在哪里,把输进去的数据从大到小排序 #include #include typedef struct student { char name[20]; int score; }STU; void sort(STU *aStu, int n) { int i,j; int temp; for(j=0;j { for(i=0;i { if(aStu[i].score>aStu[i+1].score) { temp=aStu[i].score; aStu[i].score=aSt

jQuery循环动画与获取组件尺寸的方法_jquery

本文实例讲述了jQuery循环动画与获取组件尺寸的方法.分享给大家供大家参考.具体分析如下: 一.前言 1.jQuery中的animate()方法允许您创建自定义的动画. animate() 方法几乎可以操作所有 CSS 属性,不过当使用 animate() 时,必须使用Camel标记法书写所有的属性名,比如,必须使用paddingLeft而不是padding-left,使用marginRight而不是margin-right,等等.同时,色彩动画并不包含在核心 jQuery 库中.如果需要生成

嵌套for循环

问题描述 usingSystem;usingSystem.Collections.Generic;usingSystem.Text;namespaceConsoleApplication1{classProgram{staticvoidMain(string[]args){int[]elments=newint[5];//声明长度为5的数组intindex;//计数器变量inttemp;//临时变量Console.WriteLine("输入要排序的5个值");//for循环接受用户输入

MATLAB小波图像去噪运行错误

问题描述 MATLAB小波图像去噪运行错误 function varargout = wavlet(varargin) % WAVLET M-file for wavlet.fig % WAVLET, by itself, creates a new WAVLET or raises the existing % singleton*. % % H = WAVLET returns the handle to a new WAVLET or the handle to % the existin