int i=0;p=(i++)+(i++);输出p是1,为什么? 就是想问一下它运行时候到底是怎么做的 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 int i=0;p=(i++)+(i++);第一个i++为0 之后i=1第二个i++为1 之后i=2i++先用i运算,然后i=i+1;++i先把i=i+1,再运算 这样写p=(++i)+(i++);因为i初始值是0的缘故 如果int i=0时; p=i++; 是先赋值,后i在自加 所以结果是p=0,i=1;然后看,p=(i++)+(i++) ,即第一个(i++)时,i=1,再运行第二个(i++)时,i已经为1,是先把i赋给p,然后再自加1,所以p=1,i=2 ++的优先级是高于+所以就是执行1.i++=0,i=1; 2.i++=1,i=2; 3.()+()=1; int i=0;p=(i++)+(i++);输出p是1,为什么? ======================================================我觉得是这样的:首先,第 初值为 0先计算括号头的从左向右运算:第一个()计算后i自增.变为 1再运算第二个括号 所以 p=0+1=1 p的值为1 但是值赋给P后i已经为2了int i=0;p=(i++)+(i++);第一个i++为0 之后i=1第二个i++为1 之后i=2i++先用i运算,然后i=i+1;++i先把i=i+1,再运算 我同意楼上的说法第一个括号(i++)=0,然后i=i+1;i变为1第二个括号(i++)=1,然后i=i+1;之后0+1赋值给p所以p最后结果为1; 第一个 i++ 先取 i 来运算,此时 i=0,再做++,这时i=1第二个 i++ 也i出来运算,i = 1, p = 0 + 1 = 1,i 再做++,这时i=2 我同意楼上的说法第一个括号(i++)=0,然后i=i+1;i变为1第二个括号(i++)=1,然后i=i+1;之后0+1赋值给p所以p最后结果为1; 其实我们就是想多了i++就是先计算再进行自加运算++i就是先进行自加然后计算int i;p=(i++); //这里的p=0; 此时的i=1;p=(i++)+(i++);//这里的p=2; 在C里面当i初始化为0,P=(i++)+(i++)执行后的结果是: p的值为0,i的值为2.原因是因为在C里,它的编译器把程序编译后的执行顺序为先执行+操作.然后再对i执行两次++操作.而在JAVA里面我也写了一个测试程序看过了,结果是p的值为1,i的值为2.我想这也应该是与JAVA的编译器有关的问题吧.因为编译器在处理这种表达式的时候都是使用堆栈完成的.至于其进栈和出栈顺序是由JAVA编译器来决定的.大家不要猜测.要用事实说话.去sun网站的论坛里问一下吧 如果int i=0时; p=i++; 是先赋值,后i在自加 所以结果是p=0,i=1;然后看,p=(i++)+(i++) ,即第一个(i++)时,i=1,再运行第二个(i++)时,i已经为1,是先把i赋给p,然后再自加1,所以p=1,i=2 上面没有一个说对的, ④ ② ③ ①p = (i++) + (i++) 这里要考虑运算符的优先级和各个运算符的结合性.首先优先级++ > + > = 其次++是右结合性 +是左结合,= 是右结合 所以计算顺序为图所示:①式(i++)=0; i=1②式(i++)=1; i=2③加 0+1=1; i=2④赋值p=1; i=2 这种小技巧考试有用,编软件用不上的 编译器的特性,这个在C++(VC6.0)结果是0,JAVA(JDK1.5)结果是1 没发现java的执行和在不同的编译器有多大的差异,大家有过这种例子吗? 追究这些没有意义,写代码的时候,要避免写出这种不确定的代码。这种代码,可能随 Java/C++ 而不同,可能随不同 jdk 厂商而不同,甚至有可能不同 jdk 版本而不同。因此,要避免写出这种代码,更没有必要去深究。 public class P{ public static void main(String args[]){ int i=0; int p=i+++(i++); System.out.println("i="+i+"p="+p); }}//i=2p=1 int i=0;p=(i++)/*i=0*/ +(i++)/*i=1*/;p=1; (i++)+(i++)这个表达式是从左到右进行计算的,第一个i=0,然后i++,i就等于1了;p=0+1;然后I++,i=2 这个表示的含义 我们课程设计要求设计一个磁卡充值的管理程序,请问设计思路是什么? JdbTextArea光标的问题 请问jawin 调用问题 关于输入输出流的问题 帮我看看用JCreator 3.5编译出现错误! 手机轰炸,没什么技术,只希望大家写程序的时候注意一下不要被利用 关于异常的捕获 帮帮我:我的JBuilder的鼠标拖动选中文本的功能怎么老是不行 JDK的执行问题? Graphics是在何处被实例化?对于windows版jdk来说,DrawLine等操作是在何处实现? dwr为什么不能调用方法
第一个i++为0 之后i=1
第二个i++为1 之后i=2
i++先用i运算,然后i=i+1;
++i先把i=i+1,再运算
因为i初始值是0的缘故
2.i++=1,i=2;
3.()+()=1;
======================================================
我觉得是这样的:
首先,第 初值为 0
先计算括号头的
从左向右运算:第一个()计算后i自增.变为 1
再运算第二个括号
所以 p=0+1=1
int i=0;p=(i++)+(i++);
第一个i++为0 之后i=1
第二个i++为1 之后i=2
i++先用i运算,然后i=i+1;
++i先把i=i+1,再运算
第一个括号(i++)=0,然后i=i+1;i变为1
第二个括号(i++)=1,然后i=i+1;之后0+1赋值给p
所以p最后结果为1;
第二个 i++ 也i出来运算,i = 1, p = 0 + 1 = 1,i 再做++,这时i=2
第一个括号(i++)=0,然后i=i+1;i变为1
第二个括号(i++)=1,然后i=i+1;之后0+1赋值给p
所以p最后结果为1;
i++就是先计算再进行自加运算
++i就是先进行自加然后计算
int i;
p=(i++); //这里的p=0; 此时的i=1;
p=(i++)+(i++);//这里的p=2;
而在JAVA里面我也写了一个测试程序看过了,结果是p的值为1,i的值为2.我想这也应该是与JAVA的编译器有关的问题吧.因为编译器在处理这种表达式的时候都是使用堆栈完成的.至于其进栈和出栈顺序是由JAVA编译器来决定的.大家不要猜测.要用事实说话.去sun网站的论坛里问一下吧
④ ② ③ ①
p = (i++) + (i++) 这里要考虑运算符的优先级和各个运算符的结合性.
首先优先级++ > + > = 其次++是右结合性 +是左结合,= 是右结合 所以计算顺序为图所示:
①式(i++)=0; i=1
②式(i++)=1; i=2
③加 0+1=1; i=2
④赋值p=1; i=2
这种小技巧考试有用,编软件用不上的
public static void main(String args[]){
int i=0;
int p=i+++(i++);
System.out.println("i="+i+"p="+p);
}
}
//i=2p=1
p=(i++)/*i=0*/ +(i++)/*i=1*/;
p=1;