日期:2014-05-20  浏览次数:20714 次

请问大家这道题的结果为什么是这样?
public   class   Test   {


public   static   void   main(String[]   args)   {
int   j   =   0;
for(int   i=0;i <100;i++)
{
j=j++;
System.out.println(j);
}
}

}
结果为何是打印出100个零呢?

------解决方案--------------------
faint,本来就应该是100个0啊!j就一直是0输出100遍,当然是啦
------解决方案--------------------
很简单啊,因为j++是先赋值再加1,虽然每循环一次它自己会加1,但是它总是给自己赋值为0之后才加1,所以总是输出0了
你改为j=++j;的话就会输出1-100了
注意前加和后加的区别!
------解决方案--------------------
把j=j++改为j++;即可

------解决方案--------------------
OH MY GOD!!
------解决方案--------------------
。。 一开始没反应过来。 汗 基础不行啊。
------解决方案--------------------
用j++;就可以啦,为什么还要赋值呢!多此一举,

------解决方案--------------------
Java的 ++和--
发表人:Sunnyxiao | 发表时间: 2005年一月19日, 17:08

对于++和--这两个运算符,c/c++语言和java语言有着截然不同的结果。大家可以测试一下。看看下面的程序:

……
public static void main(java.lang.String[] args) {

int k=0;
k=k++;
System.out.println( "the first k= "+k);//0????
k++;
System.out.println( "the second k= "+k);
/////////////////////////////////////////////
int x=0,y=0;
y=x++;
System.out.println( "the first x= "+x);
System.out.println( "the first y= "+y);
x++;
System.out.println( "the first x= "+x);
}
……
在c/c++中,上述程序的输出结果为:
the first k=1
the second k=2
the first x=1
the first y=1
the second x=2
而在java中结果则大出所有人的意料,结果为:
the first k=0
the second k=1
the first x=1
the first y=0
the first x=2
为什么呢?下面看看网友们的解答,从中我们可以看看大家对这个问题的理解:

【发言1:】
k=k++; // 等价于:k=k ; k=k+1;
y=x++; // 等价于:y=x ; x=x+1;

System.out.println(--j); // 等价于:System.out.println( j ); j=j+1;

while(i--> 0){ ... //等价于 :while(i> 0) { i=i+1; .....

这是和 c 一样的基本语法

【发言2:】
k=k++; // 等价于:k=k ; k=k+1;
y=x++; // 等价于:y=x ; x=x+1;
System.out.println(--j); // 等价于:System.out.println( j ); j=j-1;
while(i--> 0){ ... //等价于 :while(i> 0) { i=i-1; .....

【发言3:】
不对,不对
显然当 k = k ++时,k++没有作用,只相当于k=k !!!
java怎么会这么处理呢? 值得研究一下!

【发言4:】
据同事说在c语言里,以下几句的输出结果:
……
int k=0;
k=k++;
System.out.println( "the first k= "+k);//0????
k++;
System.out.println( "the second k= "+k);
……
结果:
the first k=1
the second k=1
这个结果比较好理解一点,可是java中的就不知道该如何理解了。

【发言5:】
java里面好象k=k++就等于k=k。

【发言6:】
k=k++
对于++这种表达式,并没有规定++运算是发生在哪一个时刻的,只规定是在取K值之后运算结束之前。我想现在是这样:
首先取出K的值,此时为0,然后执行++运算,这时K=1,然后再执行=运算,将刚才取出的值“0”赋给K,相当于K=0。
所以运算结束后K应该为0
出现这样的结果原因我想主要就是没有规定++运算具体是在哪个时刻执行。
其实好像我看书的时候也提倡不要用这种有了++--运算之后还会参加其它运算的表达式,如:B=K++ + K++

【发言7:】
好象在C语言中与JAVA中++与--不一样吧,我以前做过试验,同样的语句在C中与在JAVA中
的结果就是不一样的

【发言8:】
k = k++确实是一条无用的语句
你可以试试 k += 1 我个人认为对k赋值还是用赋值运算符比较好

【发言9:】
你为什么要使用k=k++这样的语句呢?你是想让k加一还是保留原值呢?保留原值就不要写
任何代码;想让k加一就用k++。

i=j++; 等价于

k=j;
j=j+1;
i=k;

如果把i=j++中的i换成j,则j=j++
k=j;
j=j+1;
j=k;
结果就是j=j

【发言10:】
k=k++; 等价于:k=k+1 吗?, 我觉得不等于。