我是Java的新手,需要帮助了解为方法或构造函数的参数传递引用数据类型的方法
Oracle的J2SE教程说:
在此示例中,该方法创建一个新的Polygon对象并从Point对象数组中初始化它(假设Point是一个表示x,y坐标的类):
public Polygon polygonFrom(Point[] corners) {
// method body goes here
}
但它并没有帮助我理解这个概念。非常感谢详细解释。
答案 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()可以修改列表的内容。所以在这种情况下,列表是相同的,只是传递它的引用。该列表的副本不在此处。
希望这有帮助。