话说在java中,像int long double这种基本类型作为参数的时候是值传递对吧?直接拷贝一份,在函数中修改参数值是不影响传递进来的变量值的。不过不是说java中所有的对象都是引用传递的么?话说我最近在做一个c++的项目的移植,里面有好多函数,需要同时返回n个返回值,就直接把需要得到返回值的指针传递给函数,这样函数能够直接把需要返回的值写到传递进来的指针里头话说如果我有这样的函数public  static void change(Long num){
        num=1000;
}然后在main中调用
Long a = new Long(1);
change(a);
System.out.println(a);
返回的结果仍然是1啊⋯⋯
就是说完全没有影响到a的值可是a是long的封装类Long啊,应该是一个以引用传递进来的对象啊⋯⋯请问一下上面是啥原因。。
同时拜托给出一个能够处理引用传递的解决方案啊⋯⋯(c++项目里头大量的指针传递,而且里头还套着递归,我可不想用数组作为返回值啊⋯⋯太痛苦了)感激不尽

解决方案 »

  1.   

    LZ对C/C++了解多少?
    如果LZ对指针了解的话,应该知道C/C++里也不可能改变指针的指向而引起外部变量的改变,只能改变指针指向的内容才对外部变量有影响,比如
    void change1(int* a) {
        int b = 10;
        a = &b; //这个叫改变指针的指向
    }void change2(int* a) {
        *a = 10; //这个叫改变指针指向的内容
    }void main() {
        int a = 5;
        change1(&a);
        printf("%d\n", a);
        change2(&a);
        printf("%d\n", a);
    }
    可见,C/C++里,只要是改变指针的指向,也不能对外部变量造成影响,即change1,而java没有指针概念,所以对于基本类型,没有对应的change2,只有change1,所以移植的时候,不能按部就班,要转变思想,如果不想用数组,就自己封装一个类
      

  2.   


    //修改如下,仅供参考:
    class Main 
    {
      public static Long change(Long num) //将改动的引用返回
      {
        num=1000l; //需要加“l”
        return num;
    }
      
      public static void main(String[] args)
      {
       Long a = new Long(1);
    System.out.println(change(a));    //接收返回引用,再处理
      }        
            
    }