Как передаются объекты в метод java
Объекты классов, как и данные примитивных типов, могут передаваться в методы. Однако в данном случае есть одна особенность — при передаче объектов в качестве значения передается копия ссылки на область в памяти, где расположен этот объект. Рассмотрим небольшой пример. Пусть у нас есть следующий класс Person:
public class Program < public static void main(String[] args) < Person kate = new Person("Kate"); System.out.println(kate.getName()); // Kate changeName(kate); System.out.println(kate.getName()); // Alice >static void changeName(Person p) < p.setName("Alice"); >> class Person < private String name; Person(String name)< this.name = name; >public void setName(String name) < this.name = name; >public String getName() < return this.name; >>
Здесь в метод changeName передается объект Person, у которого изменяется имя. Так как в метод будет передаваться копия ссылки на область памяти, в которой находится объект Person, то переменная kate и параметр p метода changeName будут указывать на один и тот же объект в памяти. Поэтому после выполнения метода у объекта kate, который передается в метод, будет изменено имя с «Kate» на «Alice».
От этого случая следует отличать другой случай:
public class Program < public static void main(String[] args) < Person kate = new Person("Kate"); System.out.println(kate.getName()); // Kate changePerson(kate); System.out.println(kate.getName()); // Kate - изменения не произошло // kate хранит ссылку на старый объект >static void changePerson(Person p) < p = new Person("Alice"); // p указывает на новый объект p.setName("Ann"); >static void changeName(Person p) < p.setName("Alice"); >> class Person < private String name; Person(String name)< this.name = name; >public void setName(String name) < this.name = name; >public String getName() < return this.name; >>
В метод changePerson также передается копия ссылки на объект Person. Однако в самом методе мы изменяем не отдельные значения объекта, а пересоздаем объект с помощью конструктора и оператора new. В результате в памяти будет выделено новое место для нового объекта Person, и ссылка на этот объект будет привоена параметру p:
static void changePerson(Person p) < p = new Person("Alice"); // p указывает на новый объект p.setName("Ann"); // изменяется новый объект >
То есть после создания нового объекта Person параметр p и переменная kate в методе main будут хранить ссылки на разные объекты. Переменная kate, которая передавалась в метод, продолжит хранить ссылку на старый объект в памяти. Поэтому ее значение не меняется.
Как передать объект в метод java
Для передачи объекта в метод необходимо объявить параметр метода, который будет принимать объект нужного типа. Например:
public void someMethod(MyObject obj) // тело метода >
В данном примере метод someMethod принимает объект класса MyObject , передаваемый в качестве аргумента метода. Чтобы передать объект в метод, необходимо создать экземпляр класса, и использовать его в качестве аргумента метода. Например:
MyObject obj = new MyObject(); someMethod(obj);
Здесь мы создали экземпляр класса MyObject и передали его в метод someMethod . Внутри метода someMethod мы можем работать с переданным объектом, вызывая его методы или обращаясь к его полям.
Объекты как параметры методов
Объекты классов, как и данные примитивных типов могут передаваться в методы. Однако в данном случае есть одна особенность — при передаче объектов в качестве значения передается копия ссылки на область в памяти, где расположен этот объект. Рассмотрим небольшой пример. Пусть у нас есть следующий класс Book:
public class Book < private String name ; public void setName ( String name ) < this . name = name ; public String getName ( ) < return name ; Book ( String name ) < this . name = name ;
В основном классе программы определим два дополнительных метода:
public class BookStore < public static void main ( String [ ] args ) < Book book = new Book ( "Война и мир" ) ; read ( book ) ; System . out . println ( book . getName ( ) ) ; // Неизвестная книга System . out . println ( n ) ; // 10 private static void read ( Book b ) < b . setName ( "Неизвестная книга" ) ; private static void read ( int x ) <
Здесь определены два метода с одним и тем же именем, но с разными параметрами — методы read() . В методе Main эти методы вызываются, и в них передаются соотвественно объект Book и число n.
В случае с объектом Book в метод будет передаваться копия ссылки на область памяти, в которой находится объект Book. И при изменении объекта Book в методе read соответственно поменяются и данные в этой области памяти. Поэтому на выходе объект Book будет называться не «Войн и мир», а «Неизвестная книга».
Однако число n после передачи в метод read не изменит своего значения, так как в методе Read будет создаваться копия этого числа в ввиде параметра x и затем эта копия будет использоваться в методе. После завершения работы метода число x уничтожается.
Правда, среди классов есть исключения. Например, класс String. Объекты String являются не изменяющимися или immutable , то есть если мы захотим присвоить объекту String новое значение, то для этого система создаст новый объект. Например:
Как передаются объекты в метод java
Объекты в Java передаются в методы как параметры. При этом передача объектов осуществляется по ссылке на объект.
public class Main public static void main(String[] args) // создаем объект класса MyClass MyClass obj = new MyClass(); // устанавливаем его значение равным 10 obj.setValue(10); System.out.println(obj.getValue()); // => 10 // передаем этот объект в метод changeValue и изменяем его значение на 20 changeValue(obj); System.out.println(obj.getValue()); // => 20 > public static void changeValue(MyClass obj) obj.setValue(20); > >
