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

Источник: http://net-informations.com/Java/cJava/value.htm

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Adblock
detector