引用传递和值传递

基本数据类型:值传递

引用数据类型:引用传递

String类型比较特殊:java中的参数传递实际是将对象复制一份进行传递,以下面的代码为例,输出结果为ABC 而不是123

public class Test {
    public static void main(String[] args) {
        Test test = new Test();
        String s = "ABC";
        test.change(s);
        System.out.println(s);

    }
        void change(String s){
        s= "123";
    }
}

1.将s的引用复制一份 s2传递给change方法

2.然后change要改变s的值,相当于改变s2的值,因为string被final修饰,是不可变的所以,会重新再堆内存中分配空间储存“123” 并且将地址给s2

3.所以再main方法中调用change方法以后,打印的是s指向的堆内存的地址。s 和 s2 指向的内存地址不是同一个了,s对应的是“ABC” s2对应“123”.

主要是因为String封装类型的不可变导致改变引用的对应内存空间存储对象的值时,不能对原对象操作,要重新new一个对象,导致两个引用的值不相等。普通的对象,当我们复制一份引用,他们指向同一个内存对象,当改变对象内容后,没有重新new一个新的对象,所以两个引用的值还是一样的.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值