В коде 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
.
Если вам нужны дополнительные разъяснения, просто спросите.
EDIT: Пол 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
, тогда он будет технически изменять переменную, которую отправил ей конструктор.
Проверьте эти ссылки. http://stackoverflow.com/questions/40480/is-java-pass-by-reference и http://stackoverflow.com/questions/4319537/how-do-i-pass-a-primitive- data-type-by-reference – Alex