关于参数传递----值传递和引用传递

 

    参数传递在我们设计程序写代码的时候经常用到的一个知识,它给我们带来了很大的方便,我们不需要再去写方法去返回一个参数的值,而且对于很多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也指向的是自己的那一堆内存,这就是引用传递。

      

--------------------------------------------------------分割线----------------------------------------------------------

       其实说白了,引用传递是传递地址,值传递是吧内存中的具体内容传递,这个传递过去的内容事实上是你所要传递的值一份拷贝,把这个拷贝值传过去,对了,还有一个,就是数组,数组名其实代表着一个地址,所以当你传递整个数字的名字时,就是引用传递。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值