- - Разумевање позива по вредности и позива према референци у Јави

Разумевање позива по вредности и позива према референци на Јави

Увод

Од сада сте научили о стварању објеката класе на Јави, морамо да проверимо како можемо да преносимо аргументе током креирања метода.

Ин цалл-би-валуе Приступ, вредност аргумента копира се у формални параметар подпрограма. Промјене у параметру подпрограма немају утјецаја на аргумент.

Ин позив по референци Приступ, упућује се на аргументформални параметар подпрограма, унутар потпрограма, референца се користи за приступ стварном аргументу наведеном у позиву. То значи да ће промене параметра утицати на аргумент коришћен за позивање потпрограма.

Објаснићемо оба начина преношења аргумента у методу на Јави са овим примерима.

Програм за позив по вредности

class Employee{
double salary;
int age;
void incrementSalAndAge(double sal, int a){
salary = sal+10000;
age = a+7;
System.out.println("Salary on call: "+salary);
System.out.println("Salary on call: "+age);
}
}
class CallByValueDemo{
public static void main(String args[]){
Employee employee = new Employee();
double salary = 34521.86;
int age = 23;
System.out.println("Salary before call: "+salary);
System.out.println("Salary before call: "+age);
employee.incrementSalAndAge(salary,age);
System.out.println("Salary after call: "+salary);
System.out.println("Salary after call: "+age);
}
}

Излаз

цалл_би_валуе

Програм за позив по референци

class Employee{
double salary;
int age;
void incrementSalAndAge(Employee emp){
salary = emp.salary+10000;
age = emp.age+7;
System.out.println("Salary on call: "+emp.salary);
System.out.println("Salary on call: "+emp.age);
}
}
class CallByRefDemo{
public static void main(String args[]){
Employee employee = new Employee();
employee.salary = 34512.37;
employee.age = 23;
System.out.println("Salary before call: "+employee.salary);
System.out.println("Salary before call: "+employee.age);
employee.incrementSalAndAge(employee);
System.out.println("Salary after call: "+employee.salary);
System.out.println("Salary after call: "+employee.age);
}
}

Излаз

цалл_би_референце

Објашњење Јава Цоде & Оутпута

Ако видите први програм, установит ћете да смо написали методу инцрментСалАндАге () гдје шаљемо вриједности аргумената формалним параметрима исте методе. Пре позива инцрментСалАндАге(), исписали смо вредности аргумената који ће се заиста пренети. Затим смо ажурирали вредности аргумената у инцрментСалАндАге() метода и штампано.

Тамо можете видети да ће штампати ажурирановредности формалних параметара. Након повлачења из подпрограма, ове ажуриране вредности више неће постојати. И исписат ће вриједности аргумената који су били похрањени у аргументима прије позива инцрментСалАндАге(). Закључно можемо рећи да промене параметра подпрограма немају утицаја на аргумент.

Сада ћете у другом програму видети уместо преноса вредности сачуваних у аргументима на које смо проследили референцу објекта инцрментСалАндАге() метода. Према томе, када просљеђујете ову референцу методи, параметар који је прими ће се односити на исти објект као и онај на који се позива аргумент. Из излаза то лако можете да схватите. Пре позива инцрментСалАндАге() имамо исписане вредности аргумената. Одштампао је вредности са којима се аргументи иницијализирају.

Током позива методе инцрментСалАндАге(), метода треба да ажурира вредностиформалних параметара и одштампајте ажурирану вредност. Након што се вратио из позива, исписао је ажуриране вредности за аргументе. Стога ће промјене у параметру утјецати на аргумент који се користи за позивање потпрограма јер се и аргумент и формални параметар односе на исти објект.

Запамтите, ови концепти су веома корисни за разумевање Копирајте конструкторе у Јава.

Овде потражите корисније водиче и дефинитивне смернице о Јава програмирању.

Коментари