Приветствую Вас ГостьВторник, 14.05.2024, 17:31

Программирование на Java, Android, Delphi


Блог

Главная » 2013 » Январь » 23 » Передача параметров в методы
10:17
Передача параметров в методы
Как и в других языках Java поддерживает передачу параметров по значению и по ссылке. Объекты передаются по ссылке (но не объекты-обертки для примитивных типов как Integer, Short, Byte), все остальное по значению. Например, передача по значению. В вызываемом методе изменяем значение переменной. Во внешнем блоке значение переменной не меняется.

 private void ChangeVariables(int a, int b){
a = a + 1;
b += 1;
}

int a = 10;
int b = 20;

JOptionPane.showMessageDialog(null, "a = " + a + " b = " + b);

ChangeVariables(a, b);

JOptionPane.showMessageDialog(null, "a = " + a + " b = " + b);
Объекты передаются по ссылке. Так как сама объектная переменная представляет собой указатель на объект, то указатель копируется по значению, в результате чего возможно изменение объекта в методе.
 private class TestObject{
private int field;

TestObject(int InitialValue){
field = InitialValue;
}
}

private void CnangeObject(TestObject to){
if(to != null)
to.field += 1;
}

TestObject to = new TestObject(10);
JOptionPane.showMessageDialog(null, "to.field = " + to.field);

CnangeObject(to);
JOptionPane.showMessageDialog(null, "to.field = " + to.field);
Есть категория объектов, которые являются обертками над примитивными типами - это объекты Integer, Short, Byte и другие. Казалось бы, они должны передаваться по ссылке и мы можем изменять такие объекты в методе и эти изменения сохранятся для вызываемого блока. Но на деле объекты такие передаются по значению. Я думаю, что дело тут в распаковке объекта в примитивный тип. Например:
 private void ChangeVariables1(Integer a, Integer b){
a = a + 1;
b += 1;
}

Integer c = new Integer(10);
Integer d = new Integer(20);

JOptionPane.showMessageDialog(null, "c = " + c + " d = " + d);

ChangeVariables1(c, d);
JOptionPane.showMessageDialog(null, "c = " + c + " d = " + d);
Объекты могут возвращаться методами. Пример:
 private class Test{
int field;

Test(int InitialValue){
field = InitialValue;
}
}

private Test IncByTen(int value){
return new Test(value + 10);
}

//создаем переменную и вызываем метод, который возвращает объект с полем int и значением превышающей исходную переменную на 10
int value = 10;
JOptionPane.showMessageDialog(null, "value = " + value);
JOptionPane.showMessageDialog(null, "value + 10 = " + IncByTen(value).field);
Категория: Java (Общие вопросы) | Просмотров: 2441 | Добавил: alex | Теги: параметры по значению, передача объектов, возврат объектов, передача параметров, Java, параметры по ссылке | Рейтинг: 5.0/1
Категории раздела
Java (Общие вопросы) [17]
Java (Библиотека, пакеты Java) [17]
Java (Разработка программного обеспечения на Java) [5]
Java (Среда разработки NetBeans) [5]
JSF + PrimeFaces [21]
Java EE [11]
Разное [3]
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Форма входа
Поиск
Календарь
«  Январь 2013  »
ПнВтСрЧтПтСбВс
 123456
78910111213
14151617181920
21222324252627
28293031
Архив записей