java吧 关注:1,185,492贴子:12,588,759
  • 0回复贴,共1

对java参数的理解..

只看楼主收藏回复

初学java,用惯了c语言中的指针,在java中没有指针,感觉参数有时不好传递.
关于java参数的传递类型,本人看了很多文章,大概观点都是:
1、对象是传引用的
2、参数是传值的
我觉得上面说错了,应该是无论传递什么参数,都是传值的.
你也许会说:真是笑话!!!
我也觉得是笑话,可是如果你往下看看就知道,虽然是个笑话,却有一定道理.
个人觉得参数被传递时,接受参数的方法(或者函数)在接受参数时向操作系统申请分配一个和原参数(实际参数)占有一样大小的内存空间,并给新分配的内存(形式参数)赋予原参数的值.如果仅仅对形式参数进行修改,是不会改变实际参数的值的.why??
传递单值参数就不用说了.
当你传递数组(其实数组也是对象)或者对象时,传递的是对象的变量名(属性),而并不是整个对象的所有内容,所以这个时候是值传递!!why??
因为这个时候形式参数只是接收了实际参数的值,这个值就是指向实际参数的所有内容(对象)的.就是说这个时候两个变量(实际参数和形式参数)虽然占用的内存地址不同,但却拥有共同的对象.所以无论操作哪个参数的对象其实是在操作同一个对象!!!!!!然而对象肯定就改变了!!
由于传递的值(对象名)与其他内存地址具有必然的联系,程序就可以通过这个关系来操作其他地址(对象)的值.这个时候是值传递,然而却改变对象的值了.
如果单单改变形式参数的值而不是改变形式参数的对象
实际参数的对象是不会改变的!!!
如果你不信,而且不服的话,看看下面的代码
(swap传递对象是没有改变原来的值)
class data
   {int data;
   }
public class swap 
{
public static void main(String[] args) 
{
data data_1=new data(),data_2=new data();
data_1.data=1;
        data_2.data=2;
        System.out.println(data_1.data+","+data_2.data);
swap(data_1,data_2);
System.out.println(data_1.data+","+data_2.data);
        swap(data_1.data,data_2.data);
System.out.println(data_1.data+","+data_2.data);
        swap2(data_1,data_2);
        System.out.println(data_1.data+","+data_2.data);
}

    public static void swap(data data_1,data data_2) 
{ data temp=new data();
  temp=data_1;
  data_1=data_2;
  data_2=temp;
}
    public static void swap(int data_1,int data_2) 
{ int temp;
  temp=data_1;
  data_1=data_2;
  data_2=temp;
}
    public static void swap2(data data_1,data data_2) 
{ data temp=new data();
  temp.data=data_1.data;
  data_1.data=data_2.data;
  data_2.data=temp.data;
}
}

运行结果是
1,2
1,2
1,2
2,1



1楼2007-09-25 19:21回复