参数传递
对象和引用的概念
- 对象:目前在使用new运算符在堆内存中开辟的内存空间称为对象。
- 引用:是一个变量,不一定是局部变量,还可能是成员变量(husband wife例子)。引用保存了内存地址,指向了堆内存当中的对象。
所有访问实例相关的数据,都需要通过“ 引用. ”的方式访问,因为只有通过引用才能找到对象。
只有一个空的引用,访问对象的实例相关的数据会出现空指针异常。
例: class Student{
Computer com; //com是一个引用【实例变量】
public static void doSome();{
Computer cc; //cc是一个引用【局部变量】
}
}
参数的传递:
主要研究和学习的是方法再调用的时候,涉及到参数传递的问题,到底是怎么传递数据的呢?
在以往的程序中向方法中所用的参数是形式参数,是基本数据类型(如:int i),此时进行的只是值传递,只是将字面值“ 复制 ”过去了一份,这个数据的值本身没有做任何修改。
但如果所传递的形参不是基本数据类型,而是引用数据类型(如:User u)。
public class Test02 {
public static void main(String[] args) {
User u = new User(20);
add(u);
System.out.println("main-->" + u.age); //21
}
public static void add(User u) {
u.age++;
System.out.println("add-->" + u.age); //21
}
}
class User {
int age;
//有惨数构造器
public User(int age) {
super();
this.age = age;
}
}
上述代码中,传递u给add方法的时候,实际上传递的是u变量中保存的值,只不过这个值是一个Java对象的内存地址。
可理解为 User u = 0x1234;
add (0x1234);
结论:
方法调用的时候,涉及到参数传递的问题,传递的时候,Java只遵循一种语法机制,就是将变量中保存的 " 值 " 传递过去了,只不过有时候这个值是一个字面值(10),有时候这个值是另一个Java对象的内存地址(0x1234)。