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 ?例如:
func(Person p1, Person p2)
{
Person newP1 = new Person();
Person newP2 = new Person();
if(满足条件)
{
p1 = newP1;
p2 = newP2
}
}
注:我是想到C语言里面可以用“指针的指针“来为结构体分配内存而想到这个问题的。
在C语言里:
void func(struct person ** p1, struct person ** p2)
{
*p1 = (struct person*)malloc(sizeof(struct person));
*p2 = (struct person*)malloc(sizeof(struct person));
} //这样不需要返回值,就算返回,也返回不了两个。java里怎么操作?
........
}
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 ?例如:
func(Person p1, Person p2)
{
Person newP1 = new Person();
Person newP2 = new Person();
if(满足条件)
{
p1 = newP1;
p2 = newP2
}
}
注:我是想到C语言里面可以用“指针的指针“来为结构体分配内存而想到这个问题的。
在C语言里:
void func(struct person ** p1, struct person ** p2)
{
*p1 = (struct person*)malloc(sizeof(struct person));
*p2 = (struct person*)malloc(sizeof(struct person));
} //这样不需要返回值,就算返回,也返回不了两个。java里怎么操作?
Person newP1 = new Person();
Person newP2 = new Person();
p1 = newP1;
p2 = newP2
这种声明和赋值的办法而是用p1.setName(...);
p1.setAge(...);
//...p1 settersp2.setName(...);
p2.setAge(...);
//...p2 setters去给p1,p2改变内容。简单来说就是你不能改变p1和p2所引用的对象但是如果你这个person类很大,依现在电脑硬件的条件,其实方法返回对象的拷贝也没什么负荷
那这样就有两个解决办法,
一个是
List<Person> func(Person p1, Person p2){
......
List<Person> persons = new ArrayList<Person>();
persons.add(p1);
persons.add(p2);
return persons;
}
要么是你建一个TwoPerson的类,里面两个Person成员,然后你这个方法就返回一个TwoPerson成员就好。一切都取决于你现实中的实际情况(比这个例子要复杂)。 但是想靠传址给方法传递参数,让方法里面修改的东西在方法外也有效,还真不是Java的专长,但这却让Java更规范,更系统。
Person getPerson1(){}
Person getPerson2(){}