JAVA值传递于引用传递

关于Java的参数传递过程可以分为值传递和引用传递,但是在java中却是只有值传递一种,不过是因为传递的类型不同而不同而已,值传递对于参数传递其实有时候对于初学者而言会很痛苦,因为遇到的情况就是通常我明明把值传递过去了然后调用方法所传出来的值却并没有任何改变。接下来我们就来梳理一下值传递和对象传递的不同,值传递,值传递虽然已经把参数传递过去,但是因为你传过去的值仅仅只是你的参数的一个副本,所以一旦方法结束,值也会随方法的结束而结束,所以根本就不会改变你的参数的值。
我们都知道参数的传递是实参传给形参的,如下面这个例子:
public class Gcd {
public static void main(String[] args) {
String x = "hello";
int i = 7;
Gcd g = new Gcd();
g.draw(x,i);
System.out.println("x是:\t"+x+"\ti是:\t"+i);

}
public void draw(String x,int i){
i=9;
x="hello world";
}


}
它输出的结果还是hello和7,这就说明它的值并没有改变,我们也可以这样来说,当我们创建对象的时候,计算机会在堆内存中开辟一个空间,使得这个对象有了一个地址,但是在传递的时候,计算机会把对象进行复制,也就是说会把对象复制成两份,原来的并没有传递下去,而是由它的副本进行传递,而传递出去的副本会随着方法的结束,它的寿命也会随着终结,而不会指向对象的地址,改变对象的值,所以这就是我们常说的值传递。
而如果想要在参数改变的同时改变对象的值,这时候就需要通过对象来传递值,只有这样才能够指向对象的地址,从而改变对象的值,那么我在这里也写了一个例子出来,代码如下:
class Sort{
int i,j;
int a[] = {34,54,56,4,47,57};
public void sort(){
for(i = 0;i<a.length-1;i++){
for(j = 0;j<a.length-1-i;j++){
if(a[j]>a[j+1]){
swap(a);
}
}
}
}
public void swap(int []a){
int temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
}
public void output(){
System.out.println("经排列后数组为:");
for(i = 0;i<a.length;i++){
System.out.print("  "+a[i]);
}
}
}
这是一个冒泡排序的代码,但是其实把它放在这里来讲也是一个不错的例子,因为我就是在这个冒泡的时候交换参数的时候用了值传递而老是导致参数传递不过,所以我也是思考了很久,所以才把这个例子拿出来在这里讲一下。
public void swap(int []a){
int temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
}
大家看一下这段代码吧,它所传递的是一个数组,而且还是原数组,所以它在方法里面改变了值也会随之传递到数组的地址里,所以也会引起数组改变,所以引用传递基本上就差不多是这样。如果有什么不好请大家指正,因为楼主也是一名学生,刚好学到这里,自己也在这地方遇到迷茫,所以想把自己的感受分享出来。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值