Это зависит от того, является ли field
значением или ссылкой.
Типы значений копируются при передаче в качестве параметров. Ссылочные типы не являются; функция просто передает «ссылку», которая указывает на исходное значение, и любые изменения, которые она вносит, отражаются в исходном значении.
Является ли данный тип значением или ссылкой, зависит от вашего конкретного языка программирования. Вообще говоря, базовые целочисленные и булевы типы обычно являются типами значений, а все остальное в воздухе - некоторые языки создают строковые значения, а другие рассматривают их как ссылки и т. Д.
Edit: так как вы упомянули, что вы используете Java, вот короткая программа, которая демонстрирует типы значений и ссылок:
class ClassOne {
public int myInt;
}
class ClassTwo {
public int myInt;
public ClassTwo(ClassOne c)
{
myInt = c.myInt;
c.myInt = 3;
}
}
public class main
{
public static void main(String[] args)
{
ClassOne c = new ClassOne();
c.myInt = 1;
System.out.println("C1: " + c.myInt);
ClassTwo c2 = new ClassTwo(c);
System.out.println("C2: " + c2.myInt);
System.out.println("C1: " + c.myInt);
}
}
Запуск этой программы выдаст:
C1: 1
C2: 1
C1: 3
В этой программе ClassOne и ClassTwo содержат целочисленное поле - тип значения. ClassTwo принимает параметр ClassOne - ссылочный тип - в своем конструкторе и устанавливает свое собственное целочисленное поле на основе значения заданного им объекта ClassOne, а затем изменяет значение объекта ClassOne.
Поскольку классы являются ссылочными типами, изменение объекта ClassOne в конструкторе ClassTwo приводит к изменению исходного объекта . (В основной функции здесь это c
.) Но поскольку целые числа являются типами значений, даже если c2
изменяет значение c.myInt
в своем конструкторе, потому что он заранее устанавливает свое значение own , c2.myInt
не затрагивается: он сохраняет исходный номер, потому что он был скопирован, а не на него есть ссылка.
Надеюсь, это поможет немного прояснить ситуацию.