Java中的值传递和地址值传递

1.基本数据类型【值传递】

在这里插入图片描述

2.引用数据类型【地址值传递】

(1)情况1

public class Demo {
    String str = "成员变量";
    char[] ch = {'a', 'b', 'c'};

    public void change(String s, char[] ch) {
        s += "局部变量";
        ch[0] = 'd';
    }

    public static void main(String[] args) {
        Demo demo = new Demo();
        demo.change(demo.str, demo.ch);
        System.out.println(demo.str);
        System.out.println(demo.ch);
    }
}

运行结果:
在这里插入图片描述
分析:str是引用数据类型,调用方法时将str对应的引用地址赋值给方法的参数s【此时str和s均指向同一个地址】,方法内部执行【 s += “局部变量”】,因为String是final修饰的不可变字符串,两对象相加后的新字符串与原字符串不是同一个对象,地址引用肯定不同,因此s会被重新赋值引用地址,此时str和s指向不同的地址,str指向原地址,s指向新地址

(2)情况2

public class Demo {
    String str = "成员变量";
    StringBuilder sb = new StringBuilder("成员变量");

    public void change(String s1, StringBuilder s2) {
        s1 += "局部变量";
        s2.append("局部变量");
    }
    
    public static void main(String[] args) {
        Demo demo = new Demo();
        demo.change(demo.str, demo.sb);
        System.out.println(demo.str);
        System.out.println(demo.sb);
    }
}

运行结果:
在这里插入图片描述
分析:调用方法时,方法参数s1和s2接收的都是地址引用值,但执行【 s1 += “局部变量”;】时,是将一个新对象的地址引用赋值给s1;而执行【s2.append(“局部变量”);】时,是将在原地址的基础上修改对象

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值