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