Java中值传递与引用传递

//Test.java
public class Test {
    public static void main(String[] args)
    {
        Person ps = new Person();
        ps.setPerson(10,"yyy",new Address());
        ps.printPerson();
        Address ad = ps.getAddress();
        String n = ps.getName();
        n = "lll";
        //Person psCopy = ps;
        //psCopy.setPerson(11,"llll");
        ad.setAddress("Zhenjiang", "HangZhou");
        ps.printPerson();
    }

}
//Person.java

public class Person {

    private int age;
    private String name;
    private Address address;

    public void setPerson(int age, String name, Address address)
    {
        this.age = age;
        this.name = name;
        this.address = address;
    }

    public String getName()
    {
        return this.name;
    }

    public Address getAddress()
    {
        return address;

    }




    public void printPerson()
    {
        System.out.println("name:,"+name);
        System.out.println("age:,"+age);

        address.printAddress();
    }
}
//Address.java

public class Address {
    private String province;
    private String city;

    public Address()
    {
        province = "ShanDong";
        city = "JiNan";
    }



    public void setAddress(String province, String city)
    {
        this.province = province;
        this.city = city;
    }


    public void printAddress()
    {
        System.out.println("province:," + province);
        System.out.println("city:," + city);
    }
}

输出结果:
name:,yyy
age:,10
province:,ShanDong
city:,JiNan
name:,yyy
age:,10
province:,Zhenjiang
city:,HangZhou
基本类型(String,int)传递的是值,自定义“类”传递的是引用。

修改Test.java文件,再来看一下运行结果

public class Test {
    public static void main(String[] args)
    {
        Person ps = new Person();
        ps.setPerson(10,"yyy",new Address());
        ps.printPerson();
        changObject(ps);
        ps.printPerson();
    }
    public static void changObject(Person ps)
    {
        Address ad = ps.getAddress();
        String n = ps.getName();
        n = "lll";

        ad.setAddress("Zhenjiang", "HangZhou");
    }

}

输出结果:
name:,yyy
age:,10
province:,ShanDong
city:,JiNan
name:,yyy
age:,10
province:,Zhenjiang
city:,HangZhou
可见函数参数传递时也遵照上面的规则。
Java中只有基本数据类型在栈区,自定义类放在堆区。

Person ps;//会在Java IDE报错
Person ps = new Person();//不会报错
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值