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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 揭耀祖 中级黑马   /  2012-5-25 18:02  /  1910 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

话不多说先把代码贴出来,
public class Test2
{  
         public static void add2(Integer i)
        {  
           i=10;
        }  
          public static int add3(Integer i)
         {
          return i=10;
         }
  public static void main(String args[])
        {  
          Integer i=new Integer(0);
           add2(i);  
           System.out.println(i);          //输出? 为什么?
           i=add3(i);
          System.out.println(i);          //输出? 为什么?
      }  
}  
有时候细节决定成败,不要小瞧细节。
大家说说两个都输出的是什么值,而且说说原因。

4 个回复

倒序浏览
0
10
add2没有返回值,所以i还是0没改变;add3有返回值,i=add3(i)赋值给了i,改变i的值为10,输出的自然是10了。
回复 使用道具 举报
0
10
public static void add2(Integer i) //第一个打印调用的add2没有返回值
        {  
           i=10;
        }  
          public static int add3(Integer i)
         {
          return i=10;
         }
回复 使用道具 举报
这里涉及到作用域的问题。
一、add2方法中的i为方法内部变量,并不能传递到main函数中。如果将main中i放到类中设定为static类型(增加作用域)且将传递值改为j(防止类中静态i被方法add2新定义的i覆盖),可以看到i值被成功改写。如下代码:
  1. public class cw
  2. {
  3. static Integer i=new Integer(0);         //设定静态i
  4. public static void add2(Integer j)       //将传递的值 改为j
  5. {
  6. i=10;
  7. }
  8. public static int add3(Integer i)
  9. {
  10. return i=10;
  11. }
  12. public static void main(String args[])
  13. {
  14. add2(i);
  15. System.out.println(i); //输出? 为什么?
  16. i=add3(i);
  17. System.out.println(i); //输出? 为什么?
  18. }
  19. }
复制代码
还有一种方法就是,同样将main中i放到类中设定为static类型(增加作用域),并且将i改为cw.i,指定为类中的i才能将其覆写。
  1. public class cw
  2. {
  3. static Integer i=new Integer(0);
  4. public static void add2(Integer i)
  5. {
  6. cw.i=10;
  7. }
  8. public static int add3(Integer i)
  9. {
  10. return i=10;
  11. }
  12. public static void main(String args[])
  13. {
  14. add2(i);
  15. System.out.println(i); //输出? 为什么?
  16. i=add3(i);
  17. System.out.println(i); //输出? 为什么?
  18. }
  19. }
复制代码
二、add3方法返回一个值,并且赋给main中的i,这个应该没什么疑问。
希望能够帮到你~~





点评

正解!  发表于 2012-5-25 18:27

评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1 赞一个!

查看全部评分

回复 使用道具 举报
陆建平 发表于 2012-5-25 18:14
0
10
add2没有返回值,所以i还是0没改变;add3有返回值,i=add3(i)赋值给了i,改变i的值为10,输出的自然是 ...

补充一下,main()、add2()、add3()中的 i 变量都是局部变量,两者各自存在于内存中,所以add2()、add3()只有把 i 的值return给main(),并且赋给main() 中的 i ,才有效
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马