java吧 关注:1,224,533贴子:12,682,560
  • 4回复贴,共1

问题,请求高手帮忙

只看楼主收藏回复

代码:
public class Test {
public static void main(String[]args){
Count myCount = new Count();
int times=0;
for(int i=0;i<100;i++)
increment(myCount,times);
System.out.println("count is"+myCount.count);
System.out.println("time is"+times);
}
public static void increment(Count c,int times){
c.count++;
times++;
}
}
class Count{
public int count;
Count(int c){
count=c;
}
Count(){
count=1;
}
}
结果:
count is101
time is0
问:为什么出现这个结果?请详细说明一下


IP属地:北京1楼2009-04-15 16:41回复
    • 123.118.203.*
    关于java参数值传递说起来还是比较复杂的,我总结了一下简单的说就是如果参数是对象(继承object)就会改变参数本身的属性,如果是基本类型(int,long ...)就不会变。原因就是一个地址里是句柄,一个是值
    不对的地方请楼下指正。


    2楼2009-04-15 17:14
    回复
      楼上一百分 ^-^


      3楼2009-04-15 17:27
      回复
        for(int i=0;i<100;i++) 
        increment(myCount,times);
        格式应该为for(){};如果没有“{}”,则“increment(myCount,times);”会被默认为该属于"{}"里的内容,所以会被执行100次,而myCount.count的初始值为1,所以“count is101”。
        public static void increment(Count c,int times){ 
        c.count++; 
        times++; 

        该句中,times是局部变量,执行完后就没有人管了。你打印的实际是“int times=0; ”中的“times” 。main方法里面的times和increment方法里的times都只作用于方法内。


        4楼2009-04-15 18:03
        回复
          • 221.122.51.*
          运算符可以看成一个函数,只有=才有赋值作用。而且=是变量赋值


          5楼2009-11-30 09:34
          回复