Java всегда передается по значению. То, что вы описываете, это передать ссылку на объект по значению.
Здесь есть ключевое различие. Вы не передаете объект в качестве ссылки, поэтому ссылка ссылка сломана as soon as you assign a new instance to your parameter. Пока значение ссылки остается неизменным, изменение содержимого передаваемого объекта будет сохраняться, когда вы вернетесь к вызывающему. Другим ключевым отличием является то, что эталонное значение может быть null
... но null
не является объектом - так как вы можете ссылаться на отсутствие объекта?
Если вы хотите создать новый объект, вам нужно будет скопировать существующий. Копирование должно выполняться внутри метода для обеспечения согласованности операции.
Для простых объектов (объектов с иерархией неглубокого класса, как на пример ниже), как правило, можно получить, с основным конструктором копирования:
class Album {
private String title;
private String artist;
public Album(Album copy) {
this.title = copy.title;
this.artist = copy.artist;
}
}
Это позволит вам копировать объект внутри вашего метода :
public void copyAlbum(Album album) {
album = new Album(album); // Clone the album passed in
}
для более сложных графов объектов, вы можете использовать библиотеку, такую как Orika или Dozer точно создать глубокую копию объекта. This question содержит полезные советы по копированию объектов в Java.
_It всегда посылает свой объект со ссылкой на функции_ Нет, он отправляет копию значения ссылки. –
Для этого нет простого решения. Посмотрите на объяснение неизменяемых объектов в java: http://www.javapractices.com/topic/TopicAction.do?Id=29 Если вы хотите, чтобы ваши объекты были неизменными, вам нужно запрограммировать поведение самостоятельно. – NeplatnyUdaj
Существует причина, по которой объекты передаются по ссылке, ваш код не должен пытаться изменить это поведение, но использовать его в своих интересах. У вас есть пример кода, который должен отправить копию объекта? – BLuFeNiX