powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / неизменяемые параметры в функцию
9 сообщений из 9, страница 1 из 1
неизменяемые параметры в функцию
    #38331121
NDAleksey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброго всем времени!
Стал изучать Java и столкнулся с проблемой. В "Философии Явы" (может невнимательно читал) указано, чтобы передаваемые параметры в функцию остались неизменными, нужно использовать "final", иначе значения изменятся (конечно ссылочных типов). Пишу следующий код:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
class Temp
{
	public int data;
	
	public Temp( int data )
	{
		this.data = data;
	}
	
	public void showData()
	{
		System.out.format( "data = %d\n", data );
	} 
}

public class TestExamples
{
	public static void foo( Temp temp )
	{
		temp = new Temp( 10 ); 
		
		temp.showData();
	}
	
	public static void main( String[] args )
	{
		Temp temp = new Temp( 5 );
		
		foo( temp );
		
		temp.showData();
	}

}



Прошу разъяснить, почему не изменилась ссылка передаваемого "temp"?
...
Рейтинг: 0 / 0
неизменяемые параметры в функцию
    #38331138
Фотография Penkov Vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
потому что параметры передаются по сылке. в методе foo локальная ссылка на аргумент.
...
Рейтинг: 0 / 0
неизменяемые параметры в функцию
    #38331152
Фотография Penkov Vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
немного неправильно объяснил. значение вовне не изменяется не потому что параметры передаются по ссылке (в смысле этот факт не решающий), а потому что при вызове метода аргумент будет локальным и его изменение не приведет к побочному эффекту
...
Рейтинг: 0 / 0
неизменяемые параметры в функцию
    #38331161
NDAleksey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Penkov Vladimir,

но! только щас нашел в одной статейке, а понять не могу. если я в вызывающем методе напишу:
Код: java
1.
2.
3.
4.
	public static void foo( Temp temp )
	{
		temp.data = 10;
	}



тогда у меня в Main у temp.data значение станет 10 (вместо 5). Вопрос: почему если я передаю по ссылке, то значения полей меняются, а сам объект (ссылка) не меняется? И если нетрудно - краткий экскурс: чем понятие "объект" отличается от понятия "ссылка" в Яве? (если нетрудно)
...
Рейтинг: 0 / 0
неизменяемые параметры в функцию
    #38331171
Фотография Penkov Vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вы путаете immutable и final параметры.

почитайте что такое побочный эффект вызова функции
...
Рейтинг: 0 / 0
неизменяемые параметры в функцию
    #38331178
Фотография Penkov Vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
неизменяемые параметры в функцию
    #38331202
carper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
NDAlekseyДоброго всем времени!
Стал изучать Java и столкнулся с проблемой. В "Философии Явы" (может невнимательно читал) указано, чтобы передаваемые параметры в функцию остались неизменными, нужно использовать "final", иначе значения изменятся (конечно ссылочных типов).


Вы прочли не внимательно. :)
final, применительно к аргументам метода, означает только то, что вы не сможете в теле
метода присваивать этому аргументу значения, страхуя себя от возможных ошибок.

В JAVA аргументы всегда предаются по значению, применительно у указателю/ссылке, это означает, что передается копия указателя.
Таким образом, вы можете менять значения/состояние того объекта на который указывает указатель, но не сам указатель.
Если указатель/ссылку не объявить как final, то программист сможет в коде метода изменять сам указатель, и при этом забыть, что по выходе из метода, все изменения самого указателя пропадут.
...
Рейтинг: 0 / 0
неизменяемые параметры в функцию
    #38331263
NDAleksey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
carper, Penkov Vladimir, спасибо!
...
Рейтинг: 0 / 0
неизменяемые параметры в функцию
    #38331275
rfq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NDAlekseyПрошу разъяснить, почему не изменилась ссылка передаваемого "temp"?
Потому что ее никто и не менял.

В вызываемом методе менялся параметр метода foo, но не локальная переменная метода main. Это две разные ячейки памяти. Между прочим, сам объект, сгенерированный по new Temp(10) - вообще третий участок памяти.

В общем поищите где-нибудь, как это укладывается на машинную память - стек, куча, вызовы процедур, ссылки, чтобы не мешать одни понятия с другими. Необязательно для jav'ы, все языки в этом плане примерно одинаковы.
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / неизменяемые параметры в функцию
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]