public class Test
{
public static void main(String[] args)
{
int m = 0;
for (int i = 0; i < 100; i++)
{
m = m++;
} System.out.println(m);
}
}打印的结果是?不运行程序,你能知道结果吗
{
public static void main(String[] args)
{
int m = 0;
for (int i = 0; i < 100; i++)
{
m = m++;
} System.out.println(m);
}
}打印的结果是?不运行程序,你能知道结果吗
如果是
for(){
m++
}
才是100
如果该为m = ++m; 就是100
m=m++把0赋值给了m,所以在for循环中m一直是0
最后结果为0
public class Test
{
public static void main(String[] args)
{
int m = 0;
for (int i = 0; i < 100; i++)
{
m = m + m++;
} System.out.println(m);
}
}这会打印什么呢?
public class TNumCount {
public static void main(String[] args) {
int m = 0;
for (int i = 0; i < 5; i++) {
m = m++;
// m++;
// m = ++m;
System.out.println(m);
}
System.out.println(m);
}
}
学习一下~~
m=m++
等价于
int tmp = m;
m = m + 1;
m = tmp;所以结果是0
x++是先使用x的值再执行x=x+1。
这里先使用了x的值 就是0,而x=x+1已经没有意义了,因为x=x+1只是运算过程而不是运算结果。
所以 始终打印的是0。
int tmp=m
m=m+1;
m=tmp;
老问题了
public class Test
{
public static void main(String[] args)
{
int m = 0;
for (int i = 0; i < 100; i++)
{
m = m + m++;
} System.out.println(m);
}
} 这会打印什么呢?
{
public static void main(String[] args)
{
int m = 0;
for (int i = 0; i < 100; i++)
{
m = m + m++;
}System.out.println(m);
}
}这会打印什么呢?
还是0
m = m + m++; int tmp=(m++);
int tmp2=m;
m=tmp+tmp2;
不过,如果第一题为0,又按照 26 楼“在Java语言的程序运行过程中,变量在每一次被引用时,都会创建相应的对象实例,分配相应的内存区域,其中的内容不会被重写,在变量的生命周期内的每一次引用就会有一个临时的实例对象被建立,它们的值互不影响。”的解释。第二题应该也是0吧
不过 这种自加的方式 当数据大的时候容易使堆栈溢出 记得我们老师说应该少用
i=0
m(1)=1
i=1;
m(2)=3
i=2
m(3)=7
i=3
m(4)=15
i=4
m(5)=31m(2)=m(1)*2+1
m(3)=m(2)*2+1
m(100)=m(99)*2+1经过上面的分析:它相当于下面这样的一个递归函数
function test(int n)
{
if(n==1)
return 1;
else
return test(n-1)*2+1;
}
当n的值为100的时候就是你的第二题的答案 我只是我自己的想法
m=m++;
根据优先级分两步:
1:m++ 先取值0再运算1
2:赋值m=0;
0----1----1的过程
那赋值完成后,m的++操作难道不执行了么!!!java的一个缺陷。但是可以用来考对Java的运行机制之类的东西。
t=m++; //t=0,m=1
m=t; //m=0
,所以最终m=0
m=0;m++后,m还是0,所以不论怎么循环,m始终是0
偶像 你怎么会想到5050呢........这又没考你算法 应该是0因为上面直接就赋值 M=0 所以循环无所谓 再后面还是m=m++ 所以是先循环后++就是0了 如果是++m就是另一个答案了
就是c++ 也是 0 啊,这个应该就是m++ 和 ++m
当遇到后++时
java会用一块新内存,保存操作数的副本
用副本参与运算,原操作数加1,
所以此题目中:
m=m++;
m=m+m++;
m实际上已经加了m,但此时m不在是以前的m(已经加1的)而是其副本(0)