参数传递在我们设计程序写代码的时候经常用到的一个知识,它给我们带来了很大的方便,我们不需要再去写方法去返回一个参数的值,而且对于很多Java语言里面的类构造方法都需要传递值,这种传递是参数传递中的一种,就是值传递,值传递的一个最大的特点就是只传值,把值赋值过去以后,就算是完成了一次值传递,值传递适用于几大基本数据类型和String,在这里就不过多的介绍了。
还有一种就是引用传递,这是一个非常容易出错的地方,引用传递适用于引用类型,包括用class、interface、adstract定义的类,但是不包括String,说到引用传递就要说到数据在内存中的存储方式了,内存分为栈内存和堆内存,栈内存是由编译器自动分配和释放,存放函数的参数的值,局部变量的值等。它的操作方式类似于数据结构中的栈,堆内存一般由程序员分配和释放,如果程序员不释放,程序结束的时候会被系统收回,这部分一般存储引用类型的数据,包括String,但是引用传递依然是除去String而把它放在了值传递上。
对于参数传递,无非就是对两种方法进行传递参数:构造方法和普通方法,我们来看下面的例子。
public class Student {
private String name = na;
private int score = 8;
public void Student(int score,String name){
this.name = name;
this.score = score;
}
public int getScore(){
return score;
}
public void setName(String name){
this.name = name;
}
public String getName(){
return name;
}
public void setScore(int score){
this.score = score;
}
public class test {
private String name = shan;
private int score = 90;
public static void main(String [] args){
Student sut = new Student(ui,87);
Student sut1 = new Student(ui1,57);
sut.setName(name);
sut1 = sut;
String sutname = sut.getName();
String sut1name = sut1.getName();
System.out.println("sut的名字是:"+sutname);
System.out.println("sut1的名字是:"+sut1name);
}
}
Student stu = new Student("haha",86);
Student stu1 = new Student("haha2",86);
Student stu2 = new Student("haha",86);
stu=stu2;
stu2=stu1;
这就是实例化对象利用到了值传递,前面的“haha”属于string类型,后面的是整形,这里是值传递。
后面的赋值操作,把stu2给了stu,这里就是引用传递,这个时候再内存中,变量名stu就指向了stu2的内存,而且stu2也指向的是自己的那一堆内存,这就是引用传递。
--------------------------------------------------------分割线----------------------------------------------------------
其实说白了,引用传递是传递地址,值传递是吧内存中的具体内容传递,这个传递过去的内容事实上是你所要传递的值一份拷贝,把这个拷贝值传过去,对了,还有一个,就是数组,数组名其实代表着一个地址,所以当你传递整个数字的名字时,就是引用传递。