黑马程序员技术交流社区

标题: 一个匿名对象调用的问题 [打印本页]

作者: 吴扬    时间: 2012-6-24 01:25
标题: 一个匿名对象调用的问题
本帖最后由 吴扬 于 2012-6-25 00:04 编辑

下面这段代码,不明白为什么number的打印结果是1,而不是2呢?
  1. public class Test{
  2.          
  3.           public  int test(int number){
  4.    number++;
  5.           return number;
  6.         }
  7.           public static void main(String[] args){
  8.                   int number = 1;
  9.                   new Test().test(number);  //这里number调用test方法,number自增,怎么打印的结果还是1?
  10.   System.out.println(number);
  11.           }
  12.         }
复制代码

作者: 丁二跃    时间: 2012-6-24 01:32
java 的  参数传递方式 是 传值 ,调用方法时 将 1 传入 ,而不是传的 number的引用,
在test内的 number  已经不是 main 内的那个,只是一个局部变量
函数返回 2 但你并没有接受返回值

在main 打印的 还是原来的number,  1
作者: 周兴中    时间: 2012-6-24 01:36
public class Test{
         
          public  int test(int number){
   number++;
          return number;
        }
          public static void main(String[] args){
                  int number = 1;
                  new Test().test(number); //你这个函数确实返回了一个int的结果,为2,但是并没有赋值或改变主函数中number的值,所以输出只能是1.你传入函数的number只是作为函数中的局部变量,要么语句改成 System.out.println(new Test().test(number)); 或者 number = new Test().test(number);  
  System.out.println(number);
          }
        }
作者: 余银桂    时间: 2012-6-24 02:06
  1. public class Test{

  2.          

  3.           public  int test(int number){

  4.    number++;

  5.           return number;

  6.         }

  7.           public static void main(String[] args){

  8.                   int number = 1;

  9.                   new Test().test(number);  //这里number调用test方法,number自增,怎么打印的结果还是1?

  10.                                  //这里虽然调用了方法,但是你只传入了一个值,返回的值并没有接收,所以打印的还是原来的number
  11.   System.out.println(number);

  12.           }

  13.         }
复制代码

作者: 孙飞    时间: 2012-6-24 07:14
你那里虽然number调用test方法,number自增,但是你并没有输出它,你输出的仍是局部变量number。
public class Test2
{
         
    public  int test(int number)
        {
   number++;
          return number;
    }
    public static void main(String[] args)
        {
                  int number = 1;
                  new Test2().test(number);
  System.out.println(new Test2().test(number));
     }
}

这样 就输出的是你想要的了
作者: 陆强强    时间: 2012-6-24 07:36
本帖最后由 陆强强 于 2012-6-24 07:58 编辑

看错了

作者: 封明川    时间: 2012-6-24 23:26

public class Test{
         
         public  int test(int number)
                {
                  number = number + 1;
                  System.out.println("test 内的number 为" + number);
          return number;
        }
          public static void main(String[] args){
                  int number = 1;
                  new Test().test(number);  //这里number调用test方法,number自增,怎么打印的结果还是1?
                   System.out.println(number);
          }
        }
你打印下看看结果。
匿名的对象的生命周期在它调用完成的时候就结束了,不会再对程序的变量有影响,
只在当前的语句内有效果。
作者: 吴扬    时间: 2012-6-25 00:03
看到大家的回答,恍然大悟!因为这个number是作为参数传递给test()这个方法的,而实际上打印出来的是栈内存中主函数当中的number,而这个number的值并没有改变,明白了!谢谢大家!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2