日期:2014-05-20 浏览次数:20686 次
class Person { ........ } public class Main { public static void main(String[] args) { Person p1 = new Person(); p1 = func(p1); } static Person func(Person p) { Person newp = new Person(); if(满足某一条件) p = newp; return p; } }
func(Person p1, Person p2) { Person newP1 = new Person(); Person newP2 = new Person(); if(满足条件) { p1 = newP1; p2 = newP2 } }
void func(struct person ** p1, struct person ** p2) { *p1 = (struct person*)malloc(sizeof(struct person)); *p2 = (struct person*)malloc(sizeof(struct person)); } //这样不需要返回值,就算返回,也返回不了两个。
Person newP1 = new Person(); Person newP2 = new Person(); p1 = newP1; p2 = newP2
------解决方案--------------------
一楼说的已经不错了,c和java都有类似的问题,因为它们的参数传递都是按照值传递的方式进行的,只传递一个指针或者引用到函数中,得到的都是拷贝,改变这份拷贝的指向不会影响原来的指向,只有改变”内容“才会影响到原来参数的内容。
c里面用指针的指针来解决,那么java可以用引用的引用来解决,当然引用的引用在语言层次没有支持,只有通过"持有引用"这种方式来实现了,一楼的返回一个List引用也就是这个意思。
还有,根据java中的编程原则,你的方法不应声明为func(Person p1, Person p2),应该类似这样设计:
Person getPerson1(){}
Person getPerson2(){}