-1

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

Oracle 的 J2SE 教程说:

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

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

但这并不能帮助我理解这个概念。非常感谢详细的解释。

4

2 回答 2

2

在代码中,多边形将是这样的:

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变量,那么从技术上讲,它将更改构造函数发送给它的变量。

于 2013-02-25T05:23:02.517 回答
0

很简单,检查下面的代码 -

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

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

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

希望这可以帮助。

于 2013-02-25T05:23:52.473 回答