public class Test{
public static void main(String[] args){
int i=0;
i=i++;
System.out.println("i="+i);
}
}
结果是:0;
为什么,涉及到内存的管理,具体是怎么样的呢?详细说一下!
public static void main(String[] args){
int i=0;
i=i++;
System.out.println("i="+i);
}
}
结果是:0;
为什么,涉及到内存的管理,具体是怎么样的呢?详细说一下!
先去看一下程序设计的基础,再学java
我想知道的是,具体他们在内存当中的存储,与赋值是怎么样的呢?给出过程。
i=i++;
等价于:
int temp=i;
i=i+1;
i=temp;
结果是什么也没做
应该等价于
i=i;
i=i+1;
这个等于没写
直接写i++吧
-------------------------------------
int i = 0;
i = i ++;
System.out.println(i);
-------------------------------------
得到:0
在 VC++ 中:
-------------------------------------
int i = 0;
i = i ++;
printf("%d\n", i);
-------------------------------------
得到:1因此,大家不要在这里争了,让 Micorsoft 和 Sun 去争吧。
所以我说的是被java编译器跳过了,不但没执行i=?,连i++都没执行...上头有人测试了,C++是正常理解...结果应该是1...
编译器跳过是编译器优化的问题,和我们的结论没有关系i=i++; 这条语句当然是先计算i++在前,赋值在后
如果c++执行这条语句会有影响的话,只能说明它是不合理的,有点晦涩!所以可以这样理解:
i= xxx(i); xxx(int i){ int temp=i;i=i+1;return temp; }
可以写成
i=(i++); //应该没有问题吧
当然就可以写成
int temp=(i++);
i=temp;
这样理解起来当然是很轻松的呀至于c++导致令人难以理解的结果确实是个问题,可能和c++的指针处理有关系,不过总觉得别扭!
C与Java的结果不同,只是他们对于这个的定义计算顺序不一样,这个没有什么合理不合理的。
楼主看看这个去吧!
就行了!那还有这么多废话啊!
内存的问题就是
i=i++;
等价于:
i =int temp=i;结果是什么也没做
1) 取得 (i++) 这个表达式的值,结果为 0
2) 对 ++ 运算符进行计算,结果 i 变成 1
3) 用 1) 中得到的值对 = 运算符进行计算,结果 i 变成 0
而在 C++ 语言里,它的执行细节是:
1) 取得 (i++) 这个表达式的值,结果为 0
2) 用 1) 中得到的值对 = 运算符进行计算,结果 i 变成 0
3) 对 ++ 运算符进行计算,结果 i 变成 1
这只是不同语言编译器实现的逻辑不同而已。
其实,试验一下 j = (i++) + (i++) 更容易看清楚这个问题。
i=++i先自增后赋值
i+i++ 这个值在c是不确定的(依赖编译器的)