参数的传递
一,参数的传递
1,引用与创建对象
(1)**对象:**对象是通过使用new关键字在堆内存中开辟出一块内存空间。
(2)引用:引用里面保存了内存地址,指向了堆内存中的对象。访问实例相关的数据,必须要通过引用的方式访问,引用需要找到对象。
如果出现了空引用,也就是引用没有找到对象,那么访问对象实例的相关数据会发生异常。在C语言中被称为空指针异常。
例1:
public static void main (String []args) {
int i=10;
newWay(i);//该方法调用时,给这个方法传递了一个变量i
System.out.println(i);//输出为10
}//此处i变量为局部变量,它本身占有内存,而其中保存的是10这个字面值。
public static void newWay(int i) {
i++;
System.out.println(i);//输出为11
}/*i保存的为10,但在方法调用时,这个10通过构造的方法变成了11并输出,但原先的10仍保存在内存之中,i就像是复制了一份置入了newWay方法区,所以会出现输出分别为11和10的现象。/*
根据以上所述,Java中方法调用时如果出现了参数的传递,那么它(参数)传递的实际上是自己内部中保存的具体值。就如同上述:int i=10;newWay(i)=newWay(10)
例2:
public class person {
int age;//成员变量age
public static void main (String []args) {
person p=new person();//创建age对象
p.age=10;//引用age
add(p);//构造方法
System.out.println(p.age);//11
}
public static void add(person p) {
p.age++;//自增
System.out.println(p.age);//11
}
}//发现如果创建了对象,他们的数值均变为了11,不同于例1的情况。
这是因为p本身有内存地址,它是通过new而创建出来的,p中的值是另一个Java对象在堆内存中的内存地址。不过传递的永远都是内存地址,传的、变得都是数值,这个值有时候也可能是java内存地址。
是否new了对象,对最终结果有影响,方法调用时用到了参数的传递,Java中的一个机制,就是把变量中的值传递过去了,而不是复制,所以他们的内存地址或者数值都发生了改变。(记住就好)