比如C 语言 能实现1个函数 某类型 X函数 fun (X)
     {
     }
X 是出参, X是某指针或地址,传进来后,函数执行完后 修改了X地址所存放的东西,这样X 里的东西就被修改了,并且得到保存我想问的是 JAVA 有类似的机制吗?

解决方案 »

  1.   

    java对象一直是串引用,就跟穿地址一个效果。fun里修改的内容其他地方也有效,而基本类型才是传值
      

  2.   

    Java也是可以的但传入的参数只能是对象,不能是简单类型(如int long string);但也不是所有类型都能实现你所说的机制,有的对象有时改变时可以的,有时是不一样的,比如String 
    可以实现的一例子:public class T1 {
    public static void main(String args[]) {
    String strs[] = {"1","2"};
    System.out.println(strs[0]);

    pro(strs);
    System.out.println(strs[0]);
    }
    static void pro(String[] strs){

    strs[0] = "3";
    }
    }输出为:
    1
    3
      

  3.   

    对于对象String的任何改变都是返回一个新的String对象,所以这个不能实现你所说的东东。
      

  4.   

    不知道LZ对C有多了解?void main() {
        int i = 10;
        int* p = &i;
        change(p);
        printf("%d", i);
    }void change(int* p) {
       int j = 20;
       p = &j; //这里的改变不影响main的p,注意这里是改变了指针的指向
               //如果LZ指的是这个,那么连C的指针传递也做不到,C++的引用传递能做到
       //*p = 20; //把上面的语句注释掉,放开本条语句的注释,那么这里的改变能影响p
              //如果LZ指的是这个,那么C能做到,注意这里并不是改变p的指向,而是改变p指向的地址的内容
                //java除了基本类型(包括基本类型的封装类型)和String外,也能做到。
    }所以LZ就不要费尽心机去讨论如何用一个方法去改变方法外的一个变量了,连C都做到(C++
    的引用传递能做到),能做到的只是改变和方法外的变量指向相同的地址的内容
      

  5.   

    如果LZ指的是红色的那句,那么我也说了
    //java除了基本类型(包括基本类型的封装类型)和String外,也能做到
    基本类型的封装类型如,Integer,Long等等
      

  6.   

    Java和C传参机制其实是一样的。
    The C Programming Language和The Java Programming Language两本书里都说自己只有“值传递”一种方式。
    所以,传参方面,理解了c也就理解了java
      

  7.   

    如果是对象的话,是可以的。比如传入MAP,你在里面ADD了一个。然后MAP就多了一个东东了。
      

  8.   

    http://topic.csdn.net/u/20110610/10/ce6475d4-8d83-4297-84d7-1f355b62add8.html?59296