黑马程序员技术交流社区
标题:
一个小程序
[打印本页]
作者:
揭耀祖
时间:
2012-5-25 18:02
标题:
一个小程序
话不多说先把代码贴出来,
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); //输出? 为什么?
}
}
有时候细节决定成败,不要小瞧细节。
大家说说两个都输出的是什么值,而且说说原因。
作者:
陆建平
时间:
2012-5-25 18:14
0
10
add2没有返回值,所以i还是0没改变;add3有返回值,i=add3(i)赋值给了i,改变i的值为10,输出的自然是10了。
作者:
小小企鹅
时间:
2012-5-25 18:19
0
10
public static void add2(Integer i) //第一个打印调用的add2没有返回值
{
i=10;
}
public static int add3(Integer i)
{
return i=10;
}
作者:
xieshuhua
时间:
2012-5-25 18:20
这里涉及到作用域的问题。
一、add2方法中的i为方法内部变量,并不能传递到main函数中。如果将main中i放到类中设定为static类型(增加作用域)且将传递值改为j(防止类中静态i被方法add2新定义的i覆盖),可以看到i值被成功改写。如下代码:
public class cw
{
static Integer i=new Integer(0); //设定静态i
public static void add2(Integer j) //将传递的值 改为j
{
i=10;
}
public static int add3(Integer i)
{
return i=10;
}
public static void main(String args[])
{
add2(i);
System.out.println(i); //输出? 为什么?
i=add3(i);
System.out.println(i); //输出? 为什么?
}
}
复制代码
还有一种方法就是,同样将main中i放到类中设定为static类型(增加作用域),并且将i改为cw.i,指定为类中的i才能将其覆写。
public class cw
{
static Integer i=new Integer(0);
public static void add2(Integer i)
{
cw.i=10;
}
public static int add3(Integer i)
{
return i=10;
}
public static void main(String args[])
{
add2(i);
System.out.println(i); //输出? 为什么?
i=add3(i);
System.out.println(i); //输出? 为什么?
}
}
复制代码
二、add3方法返回一个值,并且赋给main中的i,这个应该没什么疑问。
希望能够帮到你~~
作者:
黑马11期李项京
时间:
2012-5-25 18:25
陆建平 发表于 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 ,才有效
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2