大哥,你好象晕了。
是b++; 不是 b=b++;
是b++; 不是 b=b++;
解决方案 »
- 下面这段代码怎么简化?
- 为何会有这个异常
- 看thinking in java遇到了一个问题
- 我是新手class放在哪个目录上?
- 请教一个关于ASP在java里的问题,很EASY的!
- 求助高手有没有绘制圣诞树代码?
- java怎么样开发windows下的程序,我是指编译成exe文件?
- :)```一个初级问题抽象类的方法我怎么使用?!!
- Application的参数在jdk1.3的命令行下如何设定?
- JTable的内容怎样写回数据库?
- 如何运行sun公司Tutorial的例子?请有经验的大侠指教。。。一定送分
- 是不是在JDBC中连接DB用DriverManager是只支持单线程? 还可以通过什么方式连接DB?
不过偶也没看出来到底怎么回事?
b=b++;后b还是等于b,先用后加
但是b=b++为什么会如此?
先用後加,那也是加了呀。b应该加1了。怎么还是0??
大家来研究呀。
比如
a = 0;
a = a++;
那么a还是为0的,为什么会产生这种情况呢,道理很简单。
JAVA为了跨平台,在对值进行赋值的时候是用的堆栈,而不是象c等语言用的是寄存器。
大致的执行过程如下;
push a;
a ++;
pop a;
如果对他感兴趣的话,你可以看看字节码就知道了。
====================================
a = 1;
a = a++;
首先执行右边:
右边执行结果为1,取出值 1,暂存
然后a 自动加1,这时a值为2
最后执行赋值操作:
把右边执行结果赋给a,这时,a的值又变成1了
所以上面的结果是正确的
======================>>>>>>by jieyf
int b =1;
int c = b++;
b = c;
cout<<"b="<<b<<endl;
输出是:1
如果是:
int b =1;
b = b++;
cout<<"b="<<b<<endl;
输出就是:2 了,看来是C++ 做了手脚了。
这实际上是JAVA和C在处理表达式副作用的语义不同。在C中,++运算符对变量加1是在整个副值语句后才执行
比如a=a++;便宜后的伪码为
mov t1,a
mov a,t1
inc a
而在JAVA中则是紧接到运算符后就执行了
mov t1,a
inc a
mov a,t1
比如a=(a++)+a++;的对比也是这样
对比JAVA的字节码和C的汇编代码就可以知道。
这个问题以前讨论过呀
b=b++;可以拆分成两个语句b=b;b++;在java中,不能这样拆分看这个例子....
int b = 0;
int c1,c2,c3,c4,c5,c6;
b=0;
c1=b++;
System.out.println("NO c1"+": "+c1); b=0;
c2=b++ + b++;
System.out.println("NO c2"+": "+c2); b=0;
c3=b++ + b++ + b++;
System.out.println("NO c3"+": "+c3); b=0;
c4=b++ + b++ + b++ + b++;
System.out.println("NO c4"+": "+c4); b=0;
c5=b++ + b++ + b++ + b++ + b++;
System.out.println("NO c5"+": "+c5); b=0;
c6=b++ + b++ + b++ + b++ + b++ + b++;
System.out.println("NO c6"+": "+c6);
temp=a++;
a=temp;
先b赋值给b,之后b++,其实他们两个是不同的,b++是表达式循环第一次b=0
第二次:使用第一次的b=0,赋值给b还是0,之后b++循环第三次:
使用第二次的b=0,赋值给b还是0,之后b++.......
----------------------------------------
==================================================================
注意:此人因发表爱国言论,被斑竹hexiaofen*扣除6分信誉分,问你死未?!*****************************************************************