Является ли 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
