public class Test { public static void main(String[] args) {
Test t = new Test();
int i = 0;
t.tt(i);
i = i++;
System.out.println(i);
} public void tt(int i) {
i++;
}
}
结果是:0
Test t = new Test();
int i = 0;
t.tt(i);
i = i++;
System.out.println(i);
} public void tt(int i) {
i++;
}
}
结果是:0
结果当然是0
Test t = new Test();
int i = 0;
t.tt(i);
i = i++;
i = i++;
i = i++;
i = i++;
System.out.println(i);
} public void tt(int i) {
i++;
}
}
public class Test { public static void main(String[] args) {
Test t = new Test();
int i = 0;
t.tt(i); //这句话对实参i不作任何修改.建议楼主看看java的参数传递.
i++; System.out.println(i);
} public static void tt(int i) {
i++;
}
}
输出是1了,i = i++;是先赋值再自增,所以改为i++
i的结果是0不会变的,除非改成i=i+1,才行,
其实我觉得楼主的代码是在讨论两个问题,一个是方法参数的传递问题,另一个i++的用法问题.tt(i)操作的是i变量的一个副本,他不会修改i的值.i = i++中,首先会返回i,然后才将i变量递增所以i = i++ 得到的结果其实是i不变.
一开始我也没注意,后来在朋友的提醒下才想到的,呵呵.要是面试碰到这个题我绝对就挂了.
1-t.tt(i):
因为在tt中i是局部变量,屏蔽了全局变量i,所以不会改变;
2-i=i++:(个人理解)
换成b = (i++);后,b=0,i=1;可见i++确实执行了,只是赋值语句将i的值覆盖了.这只是我的猜测
i=i++可以换成i=0;i++;如果是先赋值,在执行完赋值语句后还是会执行++,只要i++执行,i的值就会+1而不会为0;
同意这个~~关于第一个:俺看过书了,正确关于第二个:i++运算,是先赋值再自增1,也就是说i =i++ ;是将i 赋成0了,但于运算结果推测,应该和6楼的猜测相同!
楼主看程序时,先找到类然后找main() 方法,一步一步的往下看:
main()方法里先生成一个对象,并把首地址给个应用变量t,然后又定义个main()方法里的局部变量i并赋值0;
走到第三步了,t.tt(i);t调用tt()方法并把实参0传入方法tt(),现在就看tt()方法了
public void tt(int i) {
i++;
}
tt()方法里的入参类型是int,入参名是i,要记住,方法-入参列表-里的入<参变量名>只是个<局部变量>,其作用域就在这个方法里,此时的int i,和int a或者int ii没什么区别,你也可以把此处的入参变量名写成的int a,那程序就成了
public void tt(int a) {
a++;
}
他们的作用是一样的,丝毫影响不到main()方法里的i,当出了这个这个方法后,tt()方法局部变量就消失了,现在往下看i = i++; 此时等号右边的i还是刚才的定义的int i = 0;那个tt()方法改变的只是其局部变量值,出了那个tt()方法就不起作用了,i先把0赋值给等号左边的i,然后再自增1, 然后打印System.out.println(i);此时打印的是等号左边的i而不是等号右边的i,所以结果就是0,sun公司官方的解释是:等号左边和右边的i的地址并不相同,等号右边的i自增后,就消失了。
public static void main(String args[]){
inti,j;
i=0;
for(j=0;j<5;j++)
{
i=i++;
System.out.println("i="+i);
}
}i=0
i=0
i=0
i=0
i=0
因为等号右边的i赋值给左i,然后自增1后就消失了。
统一7楼的看法。的却tt(i)的i是一个局部变量,同时它其中的赋值语句。
public void tt(int i) {
i++;
}
传进去的不是i,而是i的一个拷贝,所以虽然在方法tt()中执行了i++,但是i是不变的,只是i的拷贝+1,所以执行这个方法后i依然为0
接着,i=i++;这里是2个过程
1. i++,此时右边的i还是为0,因为是先赋值后加1
2. 但此时左边的i变为1了(执行了加1操作)
3. 接着右边的i赋值给左边的i,所以左边的i=0
也就是说i先被赋值为1,接着又成为0了,经历了i=1,i=0的变化过程