一道scjp题,关于方法参数的对象传递问题

class Payload {
private int weight;
public Payload (int w) { weight = w; }
public void setWeight(int w) { weight = w; }
public String toString() { return Integer.toString(weight); }
}
public class Main{
static void changePayload(Payload p) {
p = new Payload(420);
}
public static void main(String[] args) {
Payload p = new Payload(200);
p.setWeight(1024);
System.out.println(p);
changePayload(p);

System.out.println("p is " + p);
}
OUT:1024
为什么p还是main方法中原来那个p对象,没有受changePayload(p)中的P影响,输出420呢?
如果两个p不是同一对象,把 p = new Payload(420);
改为 p.setWeight(420);
输出就是420;
这不说明了在new之前p是同一个对象吗,那么在main方法中输出时候p不应该也变成了重新new之后的那个p吗?不明白

~~~两个p都不是同一个对象来的,static void changePayload(Payload p)
你在这已经声明了Payload类型的p,不和main方法那个p一样,作用范围不同~~,你在changePayload方法那写句输出语句就知道了...你已经new了,它会开辟出一个新的空间
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-11-28
new 运算符会申请一个新的空间。p = new Payload(420);
所以P就指向了另一个空间。