请指教一道模拟题,不胜感激

autosail 2004-09-23 10:12:25
Given the following code, what will be the output?

class Value
{
public int i = 15;
}

public class Test
{
public static void main(String argv[])
{
Test t = new Test();
t.first();
}

public void first()
{
int i = 5;
Value v = new Value();
v.i = 25;
second(v, i);
System.out.println(v.i);

}

public void second(Value v, int i)
{
i = 0;
v.i = 20;
Value val = new Value();
v = val;
System.out.println(v.i + " " + i);

}
}
...全文
125 4 打赏 收藏 举报
写回复
4 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
asii 2004-09-24
  • 打赏
  • 举报
回复
嗯,楼上的对,我少看了一行。
wwlwxx 2004-09-24
  • 打赏
  • 举报
回复
应该是:
15 0
20

必须记住的是java的method中的参数都是以传值的方式来传递参数,这分两种情况:
1、Primitive type,传的是它的一个拷贝,在方法中改变此参数的值不改变原先的值。
2、Object,传的是它的reference的一个拷贝,意思是说创建了一个reference,它和原先的reference指向于同一个Object,因此在方法中改变此reference所指向的Object的值,会直接改变原先Object的值。但在方法中重新赋值给此reference是不改变原先的reference,这也是所谓传值的含义。
asii 2004-09-23
  • 打赏
  • 举报
回复
15 0
25

在second中当:
{Value val = new Value();
v = val;}
后,v与val指向了同一个对像。由于没有对val.i进行数值操作,所以v.i=val.i=15
返回first后:
由于函数参数采用拷贝引用传递,v本身并没有改变,所以由于{v.i = 25;}的原因,输出:25

都转行吧 2004-09-23
  • 打赏
  • 举报
回复
25 5
25
发帖
Java

4.9w+

社区成员

Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
帖子事件
创建了帖子
2004-09-23 10:12
社区公告
暂无公告