传值与引用中的一道面试题

本文通过一个具体的Java示例,解析了对象在方法间传递时的行为特点,特别关注对象的引用传递及其带来的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这道题目当时自己做得时候确实做错了,而且两次都做错了,尴尬。

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);
  }
} 
Choices:
a. 15 0 20   b. 15 0 15   c. 20 0 20   d. 0 15 20 

  因为对象是引用传递,first()方法将 属性i = 25 的 v对象的引用 传递给second()方法
second()方法中首先将这个 v 的属性 i 改为 20 。然后让变量 v 指向新建的 val对象,second()方法中打印的是 val 的 属性 i(初始值15)
在first()方法中变量 v 指向的还是原来的对象,但已经被second()方法改为20,所以打印20
原理应该是这样 。

转载于:https://www.cnblogs.com/lzb1991/p/6509511.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值