![]() |
|
| Правила Форума редакция от 22.06.2020 |
|
|||||||
|
|
Окажите посильную поддержку, мы очень надеемся на вас. Реквизиты для переводов ниже. |
|
![]() |
|
|
Опции темы | Опции просмотра |
Language
|
|
|
#1
|
|
Постоялец
![]() ![]() Пол:
Регистрация: 19.10.2007
Сообщений: 272
Репутация: 4
|
Здравствуйте!
К своему великому сожалению узнал . что ява не поддерживает передачу формальных параметров по ссылке. Скажите есть ли способ как - то это дело все таки провернуть. Мне всеголишь хочется, что бы функция или процедура изменила мне значения четырех переменных. Писал бы на С или на Delphi или на Php передал бы по ссылке, а тут как быть ?. |
|
|
|
| Реклама: | Лучшие цены на бытовую технику: стиральная машина kuppersberg wm 610 w - у нас! | Лучшие цены на бытовую технику: посудомоечная машина встроенная - у нас! | Лучшие цены на бытовую технику: spv6zmx17e купить - у нас! | москва астрахань круиз | лазерный цветной принтер купить |
|
|
#2
|
|
Неактивный пользователь
Регистрация: 26.11.2007
Сообщений: 34
Репутация: 12
|
на самом деле все немного сложнее.
Первый постулат явы: все есть обьект. Второй постулат явы: любой обьект есть ссылка ![]() Те если ты внутри метода изменяешь какой-либо обьект то снаружи метода он тоже будет изменен ![]() (правило не распространяется на скалярные типы (int, long и тп.), но действует на Integer, Long если мне не изменяет память ![]() В крайнем случае сделай новый обьект который в себе содержит те переменные которые тебе надо изменить и в метод передавай параметром экземплляр этого обьекта ![]() |
|
|
|
| Сказали спасибо: |
|
|
#3
|
|
Постоялец
![]() ![]() Пол:
Регистрация: 19.10.2007
Сообщений: 272
Репутация: 4
|
Да уж тяжко (
|
|
|
|
|
|
#4
|
|||||||||||||||||||||||
|
Неактивный пользователь
Пол:
Регистрация: 09.01.2008
Сообщений: 11
Репутация: 2
|
Я не большой спец в Java, но мне кажется такой подход, как передаче всех объектов по ссылке связанны как раз попыткой упростить, а не усложнить язык программирования. Последний раз редактировалось sekt0r; 08.04.2008 в 15:44.. Причина: О |
|||||||||||||||||||||||
|
|
|
|
|
#5
|
|||||||||||||||||||||||
|
Неактивный пользователь
Пол:
Регистрация: 11.04.2008
Сообщений: 9
Репутация: 0
|
Да проблема актуальна, сам с ней как-то столкнулся и не смог решить. Integer, Long действительно передаются по ссылке но это не изменяемые представления, там нет методов setValue или getValue. Поэтому любая инициализация внутри метода заставит снова перераспределить память и ссылка потеряется на исходный объект ![]() |
|||||||||||||||||||||||
|
|
|
|
|
#6
|
|
Пользователь
Пол:
Регистрация: 27.02.2008
Сообщений: 57
Репутация: 7
|
используй интерфейсные классы из пакета java.lang
Integer, Double, Long и т.д. |
|
|
|
|
|
#7
|
|
Неактивный пользователь
Пол:
Регистрация: 11.04.2008
Сообщений: 9
Репутация: 0
|
Код:
class Test1 {
public static void main(String[] args) {
// 1
Integer i1 = new Integer(1);
Integer i2 = new Integer(41);
setInteger(i1, i2);
int a = i1 + i2;
System.out.println(a);
// 2
Int j1 = new Int(1);
Int j2 = new Int(41);
setInt(j1, j2);
a = j1.getValue() + j2.getValue();
System.out.println(a);
}
public static void setInteger(Integer i1, Integer i2) {
i1 = 4;
i2 = 56;
}
public static void setInt(Int i1, Int i2) {
i1.setValue(4);
i2.setValue(56);
}
}
class Int
{
private int value;
public Int(int value) {
this.value = value;
}
public void setValue(int value) {
this.value = value;
}
public int getValue() {
return value;
}
}
|
|
|
|
|
|
#8
|
|
Неактивный пользователь
Регистрация: 16.04.2008
Сообщений: 1
Репутация: 0
|
Если необходимо поменять значения встроенных типов данных - надо просто работать с массивом длины один.
Например: void swap(int []a, int []b){ int temp = a[0]; a[0] = b[0]; b[0] = temp; } int [] a = new int[1]; int [] b = new int[1]; a[0] = 3; b[0] = 5; swap(a, b); //после работы этого метода a[0] будет равно 5, а b[0] будет равно 3 это самый простой выход (на мой взгляд) из такого положения. |
|
|
|
|
|
#9
|
|
Постоялец
![]() ![]() Пол:
Регистрация: 19.10.2007
Сообщений: 272
Репутация: 4
|
Да как то не сильно радужно , в С передавать по ссылке можно было и без всего этого . просто передавая по ссылке
|
|
|
|
|
|
#10
|
|
Неактивный пользователь
Регистрация: 21.04.2008
Сообщений: 6
Репутация: 3
|
Пытаться передавать Integer по ссылке это безнадежно. Если хочется вернуть четыре значения из функции попробуйте использовать Map
|
|
|
|
|
|
#11
|
|
Неактивный пользователь
Регистрация: 23.10.2008
Сообщений: 5
Репутация: 0
|
передавай массив из 4-х переменных
|
|
|
|
|
|
#12
|
|
Пользователь
Пол:
Регистрация: 28.10.2008
Сообщений: 42
Репутация: 2
|
Вообще этот вопрос - из-за неправильного понимания ООП. Не должно возникнуть необходимости возвращать из метода сразу четыре разных независимых результата. Если эти четыре числа как-то связаны - они должны быть полями одного класса, и обрабатываться некоторым методом, который и вернет измененный экземпляр класса.
|
|
|
|
|
|
#13
|
|
Неактивный пользователь
Пол:
Регистрация: 11.04.2008
Сообщений: 9
Репутация: 0
|
Да, абсолютно прав, нужно думать объектами. Это сишный подход с использоваванием функций, но не объектов.
|
|
|
|
![]() |
Похожие темы
|
||||
| Тема | Автор | Раздел | Ответов | Последнее сообщение |
| передача файлов | artyr73 | Скорая помощь | 3 | 24.01.2010 03:01 |
| Безвозмездная передача МПЗ | hek | Правовые вопросы | 0 | 27.05.2009 08:18 |
| Передача фото с V3i | sonyim | Motorola | 1 | 12.05.2009 23:38 |
| Первая передача | shatuna | Автосервис | 17 | 26.02.2009 10:09 |
|
|