Является ли Java «pass-by-reference» или «pass-by-value»?
Прежде всего, мы должны понимать, что подразумевается под передачей по значению или передачей по ссылке.
передается по ссылке
Когда параметр передается по ссылке, вызывающий и вызываемый используют одну и ту же переменную для параметра. Если вызываемый изменяет переменную параметра, эффект видится переменной вызывающего.
передается значением
Когда параметр передается по значению, вызывающий и вызываемый имеют две независимые переменные с одинаковым значением. Если вызываемый изменяет переменную параметра, эффект не отображается вызывающему.
При передаче по ref вы в основном передаете указатель на переменную. Переходите по значению, вы передаете копию переменной. При базовом использовании это обычно означает, что с помощью ref изменения в переменной будут отображаться вызывающим методом и передаваться по значению, которое они выиграли.
Java Spec говорит, что все в Java является передачей по значению. В Java нет такой вещи, как «pass-by-reference». К сожалению, они решили назвать местоположение объекта «ссылкой». Когда мы передаем значение объекта, мы передаем ему ссылку. Это пугает начинающих.
Пример
import Java.time.LocalDate; import Java.time.Period; class Student { private String name; public Student(){} public Student(String nm){ this.name=nm; } public String getname() { return name; } public void setname(String name) { this.name = name; } }
public class TestClass { public static void main(String[] args) { Student john = new Student("John"); Student dow = new Student("Dow"); swap(john, dow); System.out.println("john name is "+john.getname()); System.out.println("dow name is "+dow.getname()); } public static void swap(Object o1, Object o2){ Object temp = o1; o1=o2; o2=temp; } }
Выход
john name is John dow name is Dow