java传递引用参数

基本类型参数的传递,是值的复制

基本类型参数的传递,是值的复制。双方各在内存中保存一份,各自的后续修改,互不影响。

例如:

public class Main {
    public static void main(String[] args) {
        Person p = new Person();
        int n = 15; // n的值为15
        p.setAge(n); // 传入n的值
        System.out.println(p.getAge()); // 15
        n = 20; // n的值改为20
        System.out.println(p.getAge()); // 15还是20?
    }
}

class Person {
    private int age;

    public int getAge() {
        return this.age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

输出值是

15
15

所以外面的n从15变到了20,但是Person里面的age并没有改变。

数组类型参数的传递,是引用的复制

字符串数组在参数传递时,考虑到字符串数组占用内存空间非常大,所以传递的是一个引用,此时调用函数的变量,被调函数的变量,和被调函数内部的变量,都是指向内存中的同一个位置的。

任意一方的修改,都会指向这个引用区域的修改。

举例说明:

//注意这里的Main是基本类型,后面是不可以写括号的
public class Main{
    public static void main(String[] args){
        //新建一个类
        Person p = new Person();
        //初始化为字符串数组,需要使用new String[] {}来初始化
        String[] fullname = new String[] {"liu","kai"};
        //因为传入的是字符串数组,所以退化为引用,实际传入了引用
        p.setName(fullname);
        System.out.println(p.getName());
        //修改了字符串数组里面的内容
        fullname[0] = "chen";
        //输出值指向被改变的引用,输出也是引用,
        System.out.println(p.getName());

        //再看一个例子
        PPerson pp = new PPerson();
        //初始化为一个基本的字符串类型
        String shortname = "liukai";
        //传入的基本值
        pp.setName(shortname);
        System.out.println(pp.getName());
        shortname = "chenkai";
        //输出的也是基本值
        System.out.println(pp.getName());   //输出liukai
        System.out.println(shortname);      //输出chenkai
        }
}

class Person{
    //新建了一个字符串数组,特别注意引用
    private String[] name;
    public String getName(){
        return this.name[0] + " " + this.name[1];
    }
    //注意这里返回类型不是String,必须写成void,否则会报错
    public void setName(String[] name){
        this.name = name;
    }
}

class PPerson{
    //新建了一个字符串基本类型
    private String name;
    public String getName(){
        return this.name;
    }
    public void setName(String name){
        this.name  = name;
    }
}

输出的结果为

liu kai
chen kai
liukai
liukai
chenkai

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值