Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Java - Передача параметров из функций

Ответить
Настройки темы
Java - Передача параметров из функций

Пользователь


Сообщения: 52
Благодарности: 1

Профиль | Отправить PM | Цитировать


Изменения
Автор: Drongo
Дата: 24-01-2013
Описание: tag code
Добрый день помогите начинающему Java програмисту.


Код: Выделить весь код
public class func {
	public static void main(String[] args) {
		String a="aaaa";
		gettext(a);
		System.out.println(a);
	}
	private static void gettext(String str){
	str="zzzz";
	}
}
Результат исполнения программы вывод aaaa а очень бы хотелось zzzz, ведь в яве все передается по ссылке, так почему же не работает?

Отправлено: 17:21, 24-01-2013

 

Аватара для ferget

Разный


Сообщения: 1294
Благодарности: 359

Профиль | Отправить PM | Цитировать


Цитата thebas:
Результат исполнения программы вывод aaaa а очень бы хотелось zzzz, ведь в яве все передается по ссылке, так почему же не работает? »
Очевидно, что утверждение " в яве все передается по ссылке" не верно.

Пару минут в гугле

Цитата:
1.Java программа работает не с самими объектами, а с сылками на объекты, а с примитивавмми напрямую.
2. В метод передается КОПИЯ, — для объекта — копия ссылки, т.о. мы можем изменять состяние объекта через его методы, т.к. копия ссылки указывает на тот же объект, что и сама ссылка, но не можем изменить значение оригинальнойссылки(т.к. в методе всего лишь ее копия), т.е. "подменить объект". С примитивами же работа идет напрямую, не через ссылки, потому примитив передается по значению в классическом понимании.
Т.о. ссылка obj в методе main абсолютно не изменяется после вызова метода myMethod, т.к. в нем идет работа с локальной копией.

Отправлено: 18:07, 24-01-2013 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Пользователь


Сообщения: 52
Благодарности: 1

Профиль | Отправить PM | Цитировать


Проводим следственный експеримент, заменяем оператор присваения, на вызов метода:
- str="zzzz";
+ str.concat("zzzz");

результат вывода не меняется.

Отправлено: 12:01, 25-01-2013 | #3


Аватара для ferget

Разный


Сообщения: 1294
Благодарности: 359

Профиль | Отправить PM | Цитировать


Цитата thebas:
Проводим следственный експеримент, заменяем оператор присваения, на вызов метода:
- str="zzzz";
+ str.concat("zzzz");
результат вывода не меняется. »
А в чем смысл этого эксперимента?

Отправлено: 20:08, 25-01-2013 | #4


Старожил


Сообщения: 435
Благодарности: 63

Профиль | Отправить PM | Цитировать


Ну так сделайте функцию
private static String getText(String str){
return "zzzzz";
}

-------
black-eric.livejournal.com


Отправлено: 20:24, 27-01-2013 | #5


Пользователь


Сообщения: 52
Благодарности: 1

Профиль | Отправить PM | Цитировать


Для ferget:
Смысл експеримента, доказать несостоятельность вашего утверждения в прошлом посту:

> 2. В метод передается КОПИЯ, — для объекта — копия ссылки, т.о. мы можем изменять состяние объекта через его методы, т.к. копия ссылки указывает на тот же объект....

str.concat("zzzz");
мы меняем обьект через его метод, и все равно обьект не меняется.

Для BlackEric:
НЕМОГУ, потому как мне необходимо возвращать более одного значения типа стринг (5-6 примерно), просто решил не нагружать форум огромным куском реального кода, а отразить существующую проблему на более простом примере.

Отправлено: 12:57, 28-01-2013 | #6


Аватара для ferget

Разный


Сообщения: 1294
Благодарности: 359

Профиль | Отправить PM | Цитировать


Читайте полностью

Цитата:
но не можем изменить значение оригинальнойссылки(т.к. в методе всего лишь ее копия), т.е. "подменить объект"
Это сообщение посчитали полезным следующие участники:

Отправлено: 15:13, 28-01-2013 | #7


Пользователь


Сообщения: 52
Благодарности: 1

Профиль | Отправить PM | Цитировать


Для ferget:
>но не можем изменить значение оригинальнойссылки(т.к. в методе всего лишь ее копия), т.е. "подменить объект"
str.concat("zzzz");
не меняет значение оригинальной ссылки, и не подменяет обьект, а именно как написанно: "изменяет состояние объекта через его методы"

И конечно я пользовался гуглом, и находил запощеные вами тут цитаты, и собственно вопрос на форуме я задал дабы уяснить: почему поведение реальной ява машины отличается от того что написано. Скажу больше: ради проверки написал свой обьект у которого всего одно поле типа стринг, и один метод который его меняет, так вот если передавать в функцию такой обьект, то его поведение абсолютно соответствует написанному вами. А вот обьект типа String почемуто ведет себя не так, и хотелось бы узнать почему, и можно ли это както обойти эффективно а не создавая какието псевдотипы.

Отправлено: 12:09, 29-01-2013 | #8


Старожил


Сообщения: 435
Благодарности: 63

Профиль | Отправить PM | Цитировать


Тогда нужно возвращать список или класс

-------
black-eric.livejournal.com


Отправлено: 16:31, 29-01-2013 | #9



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Java - Передача параметров из функций

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
PowerShell - [решено] Замена строк из файла строками из файла в файле bcubbs@fb Скриптовые языки администрирования Windows 6 24-01-2013 17:22
Передача параметров в адресную строку DaRiYs Вебмастеру 4 27-06-2008 01:52
C/C++ | Передача параметров через консоль Mad Mouse Программирование и базы данных 4 09-03-2006 16:34
передача параметров в коммандной строке netcat Хочу все знать 4 29-04-2005 00:30
передача параметров для SSI Vlad Drakula Вебмастеру 3 30-05-2003 16:50




 
Переход