请看下面这两段代码:代码一:
+++++++++++++++++++++++++
public class Test
{
public static void main(String args[])
{
int i;
i = 0;
i = i++;
System.out.println(i);
}
}
++++++++++++++++++++++++++代码二:
++++++++++++++++++++++++++
public class Test
{
public static void main(String args[])
{
int i,j;
i = 0;
j = 0;
j = i++;
System.out.println(i);
}
}++++++++++++++++++++++++++请问两段代码的输出是什么?
0还是1?我看的书给我的解释是:i先赋值,之后再自动增加1。
我的问题也就来了,对第一段代码,i先被赋值了没错吧,赋值后在自增1也没错吧,那个增加了的1被谁叼走吃了?-___________-

解决方案 »

  1.   

    结果是0 1
    如果将i = i++;===>i++;就是1了
    我也不太清楚,等待高手
      

  2.   

    原来是在编译器上出了问题,java的编译器在遇到i++和i- -的时候会重新为变量运算分配一块内存空间,以存放原始的值,而在完成了赋值运算之后,将这块内存释放掉,下面首先看一下如果是j=i++的情况:i的原始值存放在后开辟的内存中,最后这个值将赋值给j,这样j=i++后,j就会得到i的值,而i又将自加,所以,在释放内存之后,原来存放j和i的地方将得到值将是:j(此时的值等于初始i值)和i(i自加后的值)。
    原文
    http://tag.csdn.net/Article/936d0e73-abac-4e61-a997-0c80abba2e29.html
      

  3.   

    i = i++;  这个I = 1;
    j = i++;  这里的J= 0 但是i 应该是=1 因为i先赋直给j 再自增
    没有运算 应该是的
      

  4.   

    原来如此。
    感谢For_suzhen(不懂装懂)了 ^ ^
    不过这应该算是Java编译器的一个内部小bug吧另外看来我的搜索技能有待提高啊,原来这里以前已经对这个问题详细讨论过了,可我却没检索到-_-这个再放一小段时间
    晚上结分