A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 吴扬 中级黑马   /  2012-6-24 01:25  /  1837 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 吴扬 于 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.         }
复制代码

7 个回复

倒序浏览
java 的  参数传递方式 是 传值 ,调用方法时 将 1 传入 ,而不是传的 number的引用,
在test内的 number  已经不是 main 内的那个,只是一个局部变量
函数返回 2 但你并没有接受返回值

在main 打印的 还是原来的number,  1
回复 使用道具 举报
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);
          }
        }
回复 使用道具 举报
  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.         }
复制代码
回复 使用道具 举报
你那里虽然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:58 编辑

看错了
回复 使用道具 举报

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:23
8#
看到大家的回答,恍然大悟!因为这个number是作为参数传递给test()这个方法的,而实际上打印出来的是栈内存中主函数当中的number,而这个number的值并没有改变,明白了!谢谢大家!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马