黑马程序员技术交流社区
标题:
一道输出问题
[打印本页]
作者:
李泽霖
时间:
2012-2-7 15:10
标题:
一道输出问题
今天在网上看的:
int j=0;
for(int i=0;i<100;i++)
{
j=j++;
}
System.out.println(j);
输出的竟然是0,求高手们解释一下
作者:
魏腾飞
时间:
2012-2-7 15:32
int j=0;
for(int i=0;i<100;i++)
{
j=j++;
}
System.out.println(j);
这个最后的输出就是0,很正确。看来你没有认识请局部变量的作用范围。
在类的定义中存在很多变量例如
class A{
成员变量;//这个变量作用范围最大
成员方法(){
方法内变量;}//方法中的变量仅作用于方法内部
循环语句{
语句内部变量//在语句内定义了新变量但是使用完成后就从内存中消失
//如果引用了方法内变量就仅仅作用这段代码,离开该段代码后就恢复到原来值。
}
}
}
作者:
唐秀启
时间:
2012-2-7 15:57
本帖最后由 唐秀启 于 2012-2-7 17:56 编辑
j=j++;
j++赋值给j的值是原先的j的值,所以j=0,不管怎么循环一直在重复这个过程
作者:
杨扬
时间:
2012-2-7 15:59
本帖最后由 杨扬 于 2012-2-7 16:05 编辑
{:soso_e140:}你要了解 j=j++的运行顺序...
这表示的是先赋值,后运算..右边j++的值是0.把他赋给左边的 j 后.右边才进行自增.
所以输出是0...
你换成 j=++j 又是另一种结果.
或者你用另一个变量来存储,效果也是不一样的..
int j=0;
int temp=0;
for(int i=0;i<100;i++)
{
temp=j++;
}
System.out.println(temp);
temp在第一次循环的时候拿到的是0,第二次循环才拿到1.最终结果为9
如果把temp换成++j..第一次循环temp拿到的是1.结果为10...
作者:
刘基军
时间:
2012-2-7 16:01
对于:j = j++;
分析:
根据运算符优先级,应先++,再=(赋值);
所以,先是j++,然后j=1,接着再将(j++)表达式的值(为j的初始值)赋给j,则最后,j还是等于0
作者:
彭沛东
时间:
2012-2-7 16:08
本帖最后由 彭沛东 于 2012-2-7 16:08 编辑
这应该属于内存问题,首先lz的int j = 0属于成员变量(成员变量与局部变量的作用范围:成员变量作用于整个类中。局部变量作用于函数或者语句中)、而j=j+1只属于局部变量,循环一次j值就在内存中属于垃圾(等于没用)了。
作者:
何洪森
时间:
2012-2-7 16:10
主要就是一个赋值,然后还有一个j++和++j有所不同,j++先用j的值,然后j自增,而
++j是j先自增然后在用其值,所以在for循环中,j=j++每次都把0赋值给了j,自然输出
的结果就是0了。
作者:
成果
时间:
2012-2-7 16:15
你这不是相当于执行100次j=0么。。当然输出为0。原因是j=j++。。这个++在J的后面。还没有给J增加值。一直这样。而++J就不同了。
作者:
尹旗龙
时间:
2012-2-7 16:18
本帖最后由 尹旗龙 于 2012-2-7 16:46 编辑
这个题涉及到了运算符优先级
当执行j=j++;时由于++运算符优先于=运算符,所以这个语句相当于j=(j++);运算过程是:
int temp=j;
j=j+1;
j=temp;
所以每次赋值j都是0
作者:
最初的理想
时间:
2012-2-7 17:32
在循环内部,因为j++是先赋值再运算,每次实际上都是给j赋值为0,当然结果是0了,归根到底还是++j和j++的问题。一个先运算再使用,例外一个则相反。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2