|
|
|
неизменяемые параметры в функцию
|
|||
|---|---|---|---|
|
#18+
Доброго всем времени! Стал изучать 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. Прошу разъяснить, почему не изменилась ссылка передаваемого "temp"? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.07.2013, 12:09:10 |
|
||
|
неизменяемые параметры в функцию
|
|||
|---|---|---|---|
|
#18+
потому что параметры передаются по сылке. в методе foo локальная ссылка на аргумент. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.07.2013, 12:17:00 |
|
||
|
неизменяемые параметры в функцию
|
|||
|---|---|---|---|
|
#18+
немного неправильно объяснил. значение вовне не изменяется не потому что параметры передаются по ссылке (в смысле этот факт не решающий), а потому что при вызове метода аргумент будет локальным и его изменение не приведет к побочному эффекту ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.07.2013, 12:21:35 |
|
||
|
неизменяемые параметры в функцию
|
|||
|---|---|---|---|
|
#18+
Penkov Vladimir, но! только щас нашел в одной статейке, а понять не могу. если я в вызывающем методе напишу: Код: java 1. 2. 3. 4. тогда у меня в Main у temp.data значение станет 10 (вместо 5). Вопрос: почему если я передаю по ссылке, то значения полей меняются, а сам объект (ссылка) не меняется? И если нетрудно - краткий экскурс: чем понятие "объект" отличается от понятия "ссылка" в Яве? (если нетрудно) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.07.2013, 12:28:05 |
|
||
|
неизменяемые параметры в функцию
|
|||
|---|---|---|---|
|
#18+
вы путаете immutable и final параметры. почитайте что такое побочный эффект вызова функции ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.07.2013, 12:32:27 |
|
||
|
неизменяемые параметры в функцию
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.07.2013, 12:35:49 |
|
||
|
неизменяемые параметры в функцию
|
|||
|---|---|---|---|
|
#18+
NDAlekseyДоброго всем времени! Стал изучать Java и столкнулся с проблемой. В "Философии Явы" (может невнимательно читал) указано, чтобы передаваемые параметры в функцию остались неизменными, нужно использовать "final", иначе значения изменятся (конечно ссылочных типов). Вы прочли не внимательно. :) final, применительно к аргументам метода, означает только то, что вы не сможете в теле метода присваивать этому аргументу значения, страхуя себя от возможных ошибок. В JAVA аргументы всегда предаются по значению, применительно у указателю/ссылке, это означает, что передается копия указателя. Таким образом, вы можете менять значения/состояние того объекта на который указывает указатель, но не сам указатель. Если указатель/ссылку не объявить как final, то программист сможет в коде метода изменять сам указатель, и при этом забыть, что по выходе из метода, все изменения самого указателя пропадут. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.07.2013, 12:45:09 |
|
||
|
неизменяемые параметры в функцию
|
|||
|---|---|---|---|
|
#18+
carper, Penkov Vladimir, спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.07.2013, 13:10:37 |
|
||
|
неизменяемые параметры в функцию
|
|||
|---|---|---|---|
|
#18+
NDAlekseyПрошу разъяснить, почему не изменилась ссылка передаваемого "temp"? Потому что ее никто и не менял. В вызываемом методе менялся параметр метода foo, но не локальная переменная метода main. Это две разные ячейки памяти. Между прочим, сам объект, сгенерированный по new Temp(10) - вообще третий участок памяти. В общем поищите где-нибудь, как это укладывается на машинную память - стек, куча, вызовы процедур, ссылки, чтобы не мешать одни понятия с другими. Необязательно для jav'ы, все языки в этом плане примерно одинаковы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.07.2013, 13:17:01 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=38331152&tid=2128987]: |
0ms |
get settings: |
10ms |
get forum list: |
21ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
50ms |
get topic data: |
15ms |
get forum data: |
3ms |
get page messages: |
53ms |
get tp. blocked users: |
3ms |
| others: | 320ms |
| total: | 483ms |

| 0 / 0 |
