//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();//不会报错