黑马程序员技术交流社区
标题:
一道java基础题!你能否答对,并写了理由!
[打印本页]
作者:
黑马杨晨
时间:
2012-8-25 14:24
标题:
一道java基础题!你能否答对,并写了理由!
本帖最后由 黑马杨晨 于 2012-8-25 14:26 编辑
class Demo
{
public static void main(String[] args)
{
int j = 0;
for(int i=0;i<100;i++)
j = j++;
System.out.println(j);
}
}
复制代码
你认为结果是多少?并把理由或步骤写出来?
作者:
梁志仲
时间:
2012-8-25 14:51
本帖最后由 梁志仲 于 2012-8-25 15:05 编辑
打印0
j = j++; //这里的运算顺序是:先取了右边j的值存到一个临时变量中,然后对右边的j进行+1;然后将临时变量中的值赋给j。每次存到临时变量中的值都是0
System.out.println(j);
作者:
刘源
时间:
2012-8-25 14:54
本帖最后由 刘源 于 2012-8-25 14:56 编辑
class Demo
{
public static void main(String[] args)
{
int j = 0;
for(int i=0;i<100;i++)
j = j++;
System.out.println(j);
}
}
j = j++;注意这句话你可以这样看,j=j;j++;
表示j=0,然后把0这个值赋予了j,然后j自增。j虽然自增到1但没有把这个1赋值给谁。所以下一次循环的时候 j还是等于0。
j++并不等于j=j+1。只表示j+1。
而且你for循环还没有大括号,
当然打印结果就是1个0。
作者:
贾飞雨
时间:
2012-8-25 14:59
结果永远是零,
原因是j在外面赋值为零,在进入循环之后,由于是先赋值,j=j,所以打印了,下面的循环都是这样,
作者:
唐见
时间:
2012-8-25 15:00
100吧!每循环一次j自增1。
作者:
赵云柯
时间:
2012-8-25 15:43
本帖最后由 赵云柯 于 2012-8-25 15:48 编辑
打印结果是0
class Demo
{
public static void main(String[] args)
{
int j = 0;
for(int i=0;i<100;i++)
j = j++;
/*
这句话相当于
int temp = j;
j = j + 1;
j = temp;
j最终又被temp复位为0,所以循环100次后,j的值仍旧为0
如果希望j=100,代码可以改为
j++;
*/
System.out.println(j);
}
}
复制代码
在单个表达式中对相同变量j的赋值不要超过一次,否则可能产生意料之外的结果。
作者:
唐见
时间:
2012-8-25 15:46
受教了!
作者:
廉伟
时间:
2012-8-25 15:49
class Demo
{
public static void main(String[] args)
{
int j = 0;
for(int i=0;i<100;i++)
j = j++;
System.out.println(j);
}
}
不关怎么弄,结果都是0,你的那个 j=j++。他是先取了右边j保存,再对右边的j进行+1;然后将保存中的值赋给j。每次存到临时变量中的值都是0。
作者:
郗绿阳
时间:
2012-8-25 16:15
0 这相等于永远都是j=j=j+1;由于运算符等级的问题 只执行j=j这步运算
作者:
李敬
时间:
2012-8-25 17:03
本帖最后由 李敬 于 2012-8-25 17:05 编辑
..
作者:
黑马-王言龙
时间:
2012-8-25 18:10
本帖最后由 黑马-王言龙 于 2012-8-25 18:13 编辑
结果:0
理由:1、猜的
2、j++在内部有个临时变量存储,理由:猜的。
3、赋值100次都是将0赋给j,理由:由上述推出。
作者:
姬仁贵
时间:
2012-8-25 18:17
看看能不能看懂图
2P0){VWTUGKW@]82V09}I83.jpg
(35.84 KB, 下载次数: 107)
下载附件
2012-8-25 18:17 上传
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2