使用参考数据类型作为方法或构造函数的参数

时间:2013-02-25 05:16:09

标签: java

我是Java的新手,需要帮助了解为方法或构造函数的参数传递引用数据类型的方法

Oracle的J2SE教程说:

  

在此示例中,该方法创建一个新的Polygon对象并从Point对象数组中初始化它(假设Point是一个表示x,y坐标的类):

public Polygon polygonFrom(Point[] corners) {  
    // method body goes here
}

但它并没有帮助我理解这个概念。非常感谢详细解释。

2 个答案:

答案 0 :(得分:1)

在代码中,Polygon就是这样:

Point[] points = new Point[]{new Point(1,1), new Point(2,2)};
Polygon p = polygonFrom(points);

除了括号内的数组之外。

这基本上为polygonFrom函数提供了points数组,并且随心所欲。但是,无论polygonFrom方法做什么都不会实际更改原始points数组,但它会创建自己的数组来进行操作。

例如,假设我有这样的代码:

String s = "Cheeseburger";
sayString(s);

和方法:

public void sayString(String par1)
{
    par1 = par1 + "1";
    System.out.println(par1);
}

此输出:Cheeseburger1,但字符串s仍然只有Cheeseburger

如果您需要进一步澄清,请询问。

编辑: Paul Bellora指出,在某些情况下polygonFrom方法可以更改points数组,我将在此处尝试解释。但是,如果这没有任何意义,那么你不应该担心它(所有这些都需要考虑)。

polygonFrom方法可以在自己的方法中以及整个类中更改任何变量。因此,如果points数组在方法之外(即main方法之外)初始化,polygonFrom方法可能会更改points数组,但仅限于polygonFrom方法内部的代码表示直接更改该变量。我希望这是有道理的。

例如,在课程中:

Point[] points;

public MethodAccess()//constructor
{
    points = new Point[]{new Point(1,1), new Point(2,2)};
    Polygon p = polygonFrom(points);
}

public Polygon polygonFrom(Point[] corners){

    //doing stuff with corners variable here

    points = corners; //this will change the points variable that was passed

}

构造函数将发送polygonFrom points变量,但polygonFrom获取变量并创建它的新实例。 polygonFrom方法现在更改其新创建的corners变量,该变量最初与points具有相同的值。但是,如果方法polygonFrom明确指出要更改points变量,那么它在技术上会更改构造函数发送给它的变量。

答案 1 :(得分:0)

简单,请查看以下代码 -

public void a() {
    List<String> list = new ArrayList<String>();
    b(list);
}

public void b(List<String> list) {
    list.add("something");
}

方法a()创建一个列表并将其引用传递给方法b(),以便b()可以修改列表的内容。所以在这种情况下,列表是相同的,只是传递它的引用。该列表的副本不在此处。

希望这有帮助。