Компьютерный форум NoWa.cc Здесь может быть Ваша реклама
Правила Форума
редакция от 22.06.2020
Форум .::NoWa.cc::.
Вернуться   Компьютерный форум NoWa.cc > В помощь вебмастеру > Программирование > Java

Уважаемые пользователи nowa.cc. Мы работаем для вас более 20 лет и сейчас вынуждены просить о финансовой помощи по оплате за сервер.
Окажите посильную поддержку, мы очень надеемся на вас. Реквизиты для переводов ниже.
Webmoney Webmoney WMZ: Z021474945171 Webmoney WME: E159284508897 Webmoney WMUSDT: T206853643180
Кошелёк для вашей помощи YooMoney 4100117770549562
YooMoney Спасибо за поддержку!

Ответ
 
Опции темы Опции просмотра Language
Старый 06.02.2008, 18:09   #1
Постоялец
 
Пол:Мужской
Регистрация: 19.10.2007
Сообщений: 272
Репутация: 4
По умолчанию Передача формальных параметровпо ссылке.

Здравствуйте!
К своему великому сожалению узнал . что ява не поддерживает передачу формальных параметров по ссылке. Скажите есть ли способ как - то это дело все таки провернуть. Мне всеголишь хочется, что бы функция или процедура изменила мне значения четырех переменных. Писал бы на С или на Delphi или на Php передал бы по ссылке, а тут как быть ?.
Wizard2007 вне форума
 
Ответить с цитированием Вверх
Здесь может быть Ваша реклама
Здесь может быть Ваша реклама


Реклама: Лучшие цены на бытовую технику: стиральная машина kuppersberg wm 610 w - у нас!Лучшие цены на бытовую технику: посудомоечная машина встроенная - у нас!Лучшие цены на бытовую технику: spv6zmx17e купить - у нас!москва астрахань круизлазерный цветной принтер купить


Старый 06.02.2008, 20:21   #2
fatroom
Неактивный пользователь
 
Регистрация: 26.11.2007
Сообщений: 34
Репутация: 12
По умолчанию Ответ: Передача формальных параметровпо ссылке.

на самом деле все немного сложнее.
Первый постулат явы: все есть обьект.
Второй постулат явы: любой обьект есть ссылка
Те если ты внутри метода изменяешь какой-либо обьект то снаружи метода он тоже будет изменен
(правило не распространяется на скалярные типы (int, long и тп.), но действует на Integer, Long если мне не изменяет память
В крайнем случае сделай новый обьект который в себе содержит те переменные которые тебе надо изменить и в метод передавай параметром экземплляр этого обьекта
fatroom вне форума
 
Ответить с цитированием Вверх
Старый 06.02.2008, 22:32   #3
Wizard2007
Постоялец
 
Пол:Мужской
Регистрация: 19.10.2007
Сообщений: 272
Репутация: 4
По умолчанию Ответ: Передача формальных параметровпо ссылке.

Да уж тяжко (
Wizard2007 вне форума
 
Ответить с цитированием Вверх
Старый 08.04.2008, 15:35   #4
sekt0r
Неактивный пользователь
 
Пол:Мужской
Регистрация: 09.01.2008
Сообщений: 11
Репутация: 2
По умолчанию Ответ: Передача формальных параметровпо ссылке.

Цитата:
Сообщение от fatroom Посмотреть сообщение
на самом деле все немного сложнее.


Я не большой спец в Java, но мне кажется такой подход, как передаче всех объектов по ссылке связанны как раз попыткой упростить, а не усложнить язык программирования.

Последний раз редактировалось sekt0r; 08.04.2008 в 15:44.. Причина: О
sekt0r вне форума
 
Ответить с цитированием Вверх
Старый 11.04.2008, 11:04   #5
studias
Неактивный пользователь
 
Пол:Мужской
Регистрация: 11.04.2008
Сообщений: 9
Репутация: 0
По умолчанию Ответ: Передача формальных параметровпо ссылке.

Цитата:
Сообщение от fatroom Посмотреть сообщение
на самом деле все немного сложнее.
.....
(правило не распространяется на скалярные типы (int, long и тп.), но действует на Integer, Long если мне не изменяет память
.....

Да проблема актуальна, сам с ней как-то столкнулся и не смог решить.
Integer, Long действительно передаются по ссылке но это не изменяемые представления, там нет методов setValue или getValue. Поэтому любая инициализация внутри метода заставит снова перераспределить память и ссылка потеряется на исходный объект
studias вне форума
 
Ответить с цитированием Вверх
Старый 11.04.2008, 14:04   #6
tema_hack
Пользователь
 
Пол:Мужской
Регистрация: 27.02.2008
Сообщений: 57
Репутация: 7
По умолчанию Ответ: Передача формальных параметровпо ссылке.

используй интерфейсные классы из пакета java.lang
Integer, Double, Long и т.д.
tema_hack вне форума
 
Ответить с цитированием Вверх
Старый 13.04.2008, 12:17   #7
studias
Неактивный пользователь
 
Пол:Мужской
Регистрация: 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;
	}
}
Так вот, я конечно давно не писал на java, но суть того, что сказал выше можно передать этим кодом. Класс, например, Integer конечно же передает ссылку, но все изменения в нутри приводят к перераспределению памяти. Надо писать свой класс Int - изменяемый, тогда все Ок. Получим результаты 1 - 42 (бесполезный результат) , 2 - 60 (ожидаемый результат)
studias вне форума
 
Ответить с цитированием Вверх
Старый 16.04.2008, 12:47   #8
MagicBird
Неактивный пользователь
 
Регистрация: 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

это самый простой выход (на мой взгляд) из такого положения.
MagicBird вне форума
 
Ответить с цитированием Вверх
Старый 19.04.2008, 22:05   #9
Wizard2007
Постоялец
 
Пол:Мужской
Регистрация: 19.10.2007
Сообщений: 272
Репутация: 4
По умолчанию Ответ: Передача формальных параметровпо ссылке.

Да как то не сильно радужно , в С передавать по ссылке можно было и без всего этого . просто передавая по ссылке
Wizard2007 вне форума
 
Ответить с цитированием Вверх
Старый 21.04.2008, 22:53   #10
deniskob
Неактивный пользователь
 
Регистрация: 21.04.2008
Сообщений: 6
Репутация: 3
По умолчанию Ответ: Передача формальных параметровпо ссылке.

Пытаться передавать Integer по ссылке это безнадежно. Если хочется вернуть четыре значения из функции попробуйте использовать Map
deniskob вне форума
 
Ответить с цитированием Вверх
Старый 23.10.2008, 21:22   #11
vadimso
Неактивный пользователь
 
Регистрация: 23.10.2008
Сообщений: 5
Репутация: 0
По умолчанию Re: Передача формальных параметровпо ссылке.

передавай массив из 4-х переменных
vadimso вне форума
 
Ответить с цитированием Вверх
Старый 28.10.2008, 17:48   #12
nanomyte
Пользователь
 
Пол:Мужской
Регистрация: 28.10.2008
Сообщений: 42
Репутация: 2
По умолчанию Re: Передача формальных параметровпо ссылке.

Вообще этот вопрос - из-за неправильного понимания ООП. Не должно возникнуть необходимости возвращать из метода сразу четыре разных независимых результата. Если эти четыре числа как-то связаны - они должны быть полями одного класса, и обрабатываться некоторым методом, который и вернет измененный экземпляр класса.
nanomyte вне форума
 
Ответить с цитированием Вверх
Старый 11.02.2009, 12:50   #13
studias
Неактивный пользователь
 
Пол:Мужской
Регистрация: 11.04.2008
Сообщений: 9
Репутация: 0
По умолчанию Re: Передача формальных параметровпо ссылке.

Да, абсолютно прав, нужно думать объектами. Это сишный подход с использоваванием функций, но не объектов.
studias вне форума
 
Ответить с цитированием Вверх
Ответ


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
передача файлов 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

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Текущее время: 16:19. Часовой пояс GMT +3.


Copyright ©2004 - 2026 NoWa.cc

Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2026, vBulletin Solutions, Inc. Перевод: zCarot
Время генерации страницы 0.07371 секунды с 11 запросами