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

Ответить
Аватара пользователя
thebas

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

Сообщение thebas »

Добрый день помогите начинающему 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, ведь в яве все передается по ссылке, так почему же не работает?
Аватара пользователя
ferget

Re: Java - Передача параметров из функций

Сообщение ferget »

Цитата thebas:



Результат исполнения программы вывод aaaa а очень бы хотелось zzzz, ведь в яве все передается по ссылке, так почему же не работает?
Java - Передача параметров из функций




Очевидно, что утверждение " в яве все передается по ссылке" не верно.



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




Цитата:



1.Java программа работает не с самими объектами, а с сылками на объекты, а с примитивавмми напрямую.

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

Т.о. ссылка obj в методе main абсолютно не изменяется после вызова метода myMethod, т.к. в нем идет работа с локальной копией.
Аватара пользователя
thebas

Re: Java - Передача параметров из функций

Сообщение thebas »

Проводим следственный експеримент, заменяем оператор присваения, на вызов метода:

- str="zzzz";

+ str.concat("zzzz");



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

Re: Java - Передача параметров из функций

Сообщение thebas »

Цитата thebas:



Проводим следственный експеримент, заменяем оператор присваения, на вызов метода:

- str="zzzz";

+ str.concat("zzzz");

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




А в чем смысл этого эксперимента?
Аватара пользователя
BlackEric

Re: Java - Передача параметров из функций

Сообщение BlackEric »

Ну так сделайте функцию

private static String getText(String str){

return "zzzzz";

}
Аватара пользователя
BlackEric

Re: Java - Передача параметров из функций

Сообщение BlackEric »

Для ferget:

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



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



str.concat("zzzz");

мы меняем обьект через его метод, и все равно обьект не меняется.



Для BlackEric:

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

Re: Java - Передача параметров из функций

Сообщение ferget »

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




Цитата:



но не можем изменить значение оригинальнойссылки(т.к. в методе всего лишь ее копия), т.е. "подменить объект"
Аватара пользователя
thebas

Re: Java - Передача параметров из функций

Сообщение thebas »

Для ferget:

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

str.concat("zzzz");

не меняет значение оригинальной ссылки, и не подменяет обьект, а именно как написанно: "изменяет состояние объекта через его методы"



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

Re: Java - Передача параметров из функций

Сообщение BlackEric »

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

Вернуться в «Программирование и базы данных»