我是 Java 新手,需要帮助理解为方法或构造函数的参数传递引用数据类型的方法
Oracle 的 J2SE 教程说:
在此示例中,该方法创建了一个新的 Polygon 对象并从 Point 对象数组对其进行初始化(假设 Point 是一个表示 x、y 坐标的类):
public Polygon polygonFrom(Point[] corners) {
// method body goes here
}
但这并不能帮助我理解这个概念。非常感谢详细的解释。
我是 Java 新手,需要帮助理解为方法或构造函数的参数传递引用数据类型的方法
Oracle 的 J2SE 教程说:
在此示例中,该方法创建了一个新的 Polygon 对象并从 Point 对象数组对其进行初始化(假设 Point 是一个表示 x、y 坐标的类):
public Polygon polygonFrom(Point[] corners) {
// method body goes here
}
但这并不能帮助我理解这个概念。非常感谢详细的解释。
在代码中,多边形将是这样的:
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
变量,那么从技术上讲,它将更改构造函数发送给它的变量。
很简单,检查下面的代码 -
public void a() {
List<String> list = new ArrayList<String>();
b(list);
}
public void b(List<String> list) {
list.add("something");
}
方法 a() 创建一个列表并将其引用传递给方法 b() 以便 b() 可以修改列表的内容。所以在这种情况下,列表是相同的,只是它的引用被传递了。此处未制作该列表的副本。
希望这可以帮助。