当前位置: 代码迷 >> J2SE >> []java 函数内创建对象的方法
  详细解决方案

[]java 函数内创建对象的方法

热度:2659   发布时间:2013-02-25 00:00:00.0
[求助]java 函数内创建对象的方法?
Java code
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里改变函数外面的p1的指向,我知道这是可以的。

疑问:假如main里面有 Person p1和 Person p2,有没有办法调用func,改变这两个分别指向func里新new出来的两个不同的Person: newP1 和 newP2 ?

例如:
Java code
func(Person p1, Person p2){    Person newP1 = new Person();    Person newP2 = new Person();    if(满足条件)    {        p1 = newP1;        p2 = newP2    }}



注:我是想到C语言里面可以用“指针的指针“来为结构体分配内存而想到这个问题的。
在C语言里:
C/C++ code
void func(struct person ** p1, struct person ** p2){        *p1 = (struct person*)malloc(sizeof(struct person));        *p2 = (struct person*)malloc(sizeof(struct person));}  //这样不需要返回值,就算返回,也返回不了两个。


java里怎么操作?

------解决方案--------------------------------------------------------
不错的问题。

有个办法,就是前提是lz的方法里不能有
Java code
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(){}

  相关解决方案