Core Java - 按值传递与按引用传递 - object reference

我们先明确两个概念。

按值传递(Pass-by-value):指在方法调用中,传递的是参数值的拷贝(Pass-by-copy)
按引用传递(Pass-by-reference):指在方法调用中,传递是变量的地址。

在Java中,所有的对象引用都是按值传递的,但这是否意味着对象的实值就不会发生改变了呢?并不。我们可以传递对象的地址,通过地址修改对象的属性。

我们从一个比较综合的例子开始

public class DragonWarriorReferenceChallenger {

  public static void main(String... doYourBest) {
    StringBuilder warriorProfession = new StringBuilder("Dragon ");
    String warriorWeapon = "Sword ";
    changeWarriorClass(warriorProfession, warriorWeapon);

    System.out.println("Warrior=" + warriorProfession + " Weapon=" + warriorWeapon);
  }

  static void changeWarriorClass(StringBuilder warriorProfession, String weapon) {
    warriorProfession.append("Knight");
    weapon = "Dragon " + weapon;

    weapon = null; //weapon 和 warriorProfession 都是本地变量
    warriorProfession = null;
  }

}

请选择您输出的结果
A: Warrior=null Weapon=null
B: Warrior=Dragon Weapon=Dragon
C: Warrior=Dragon Knight Weapon=Dragon Sword
D: Warrior=Dragon Knight Weapon=Sword

正确答案:D
分析:String是不可变对象,而StringBuilder是可变对象

What to remember about object references
  • Java always passes parameter variables by value.
  • Object variables in Java always point to the real object in the memory heap.
  • A mutable object’s (比如自己创建的类的对象,StringBulider)value can be changed when it is passed to a method.
  • An immutable object’s (比如String)value cannot be changed, even if it is passed a new value.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值