|
|
|
FAQ. Миф 1-ый.
|
|||
|---|---|---|---|
|
#18+
Признаться до последнего момента я находился в заблуждении относительно передачи параметров в функцию в Jave. Для того, кто раньше работал с С или С++ предложение "примитивы в Java передаются по значению, а объекты по ссылке" не вызывает никаких вопросов или подозрений. А на самом деле они должны их вызывать! К первой части предложения никаких претензий нет: всё здесь аналогично С++, т.е. значение переменной копируется и действия в функции производятся уже над копией. Пример, file Example1.java: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. Теперь перейдем к объектам. file Example2.java: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. Код: plaintext 1. 2. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. Чтобы прояснить ситуацию, рассмотрим след. пример. file Example3.java: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. В чем же разница между двумя последними примерами? Итак надо понять, что в обоих примерах внутри функции changeValue() создается ещё одна ссылка на передаваемый объект, т.е. она является копией ссылки, передаваемой в функцию. Внутри функции changeValue() формальному параметру toChange присваивается новая ссылка Код: plaintext 1. В последнем примере так же создается копия ссылки на объект передаваемый функции, но "изменение" объекта, т.е. поля класса MyObject, происходит методами самого объекта. Вот почему при выходе из функции, строка сохраняет изменения, произведенные в функции. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2005, 17:17 |
|
||
|
FAQ. Миф 1-ый.
|
|||
|---|---|---|---|
|
#18+
Да. Как обманчива природа говорил ежик слазия с кактуса. Ошибка довольнотоки распространенная, дело в том что ты передаеш не объект по ссылке а куазательна объектю И когда переприсваиваеш значение указателя то в этом случаее на переданный исходный указатель это ни как не влияет. Для прграмиста C++ как раз все ясно и понятно если учесть что -> заменяеться на . И работаем все время с указателями. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2005, 17:39 |
|
||
|
FAQ. Миф 1-ый.
|
|||
|---|---|---|---|
|
#18+
Евгений Путилин Для прграмиста C++ как раз все ясно и понятно если учесть что -> заменяеться на . И работаем все время с указателями. Программист на С++ (в топике java vs с++) утверждал, что часть объектов передаётся по значению (String), а часть по ссылке... Не надо говорить за всех %) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2005, 19:51 |
|
||
|
FAQ. Миф 1-ый.
|
|||
|---|---|---|---|
|
#18+
>> что часть объектов передаётся по значению (String), а часть по ссылке... String передаётся так же, как и все объеты. Просто в природе не существует методов, которые изменили бы внутренность String'а. Если кто хочет класс, который ведёт себя так же, как простой тип, то он должен убрать оттуда все методы, которые могут менять содержимое текущего объекта. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2005, 09:00 |
|
||
|
FAQ. Миф 1-ый.
|
|||
|---|---|---|---|
|
#18+
rimanПризнаться до последнего момента я находился в заблуждении относительно передачи параметров в функцию в Jave. Для того, кто раньше работал с С или С++ предложение "примитивы в Java передаются по значению, а объекты по ссылке" не вызывает никаких вопросов или подозрений. А на самом деле они должны их вызывать! К первой части предложения никаких претензий нет: всё здесь аналогично С++, т.е. значение переменной копируется и действия в функции производятся уже над копией. Пример, file Example1.java: Никакого мифа здесь нет. Все дело в том, что в Java объекты типа String являются НЕИЗМЕНЯЕМЫМИ ! Поэтому orig_parameter всегда указывает на строку "the original string" Для работы с изменяемыми строками служит StringBuffer ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2005, 10:18 |
|
||
|
FAQ. Миф 1-ый.
|
|||
|---|---|---|---|
|
#18+
Ctrl+Alt+DeleteНикакого мифа здесь нет. Все дело в том, что в Java объекты типа String являются НЕИЗМЕНЯЕМЫМИ ! Поэтому orig_parameter всегда указывает на строку "the original string" Для работы с изменяемыми строками служит StringBuffer Причем здесь изменяемость/неизменяемость? Я что, не могу присвоить ссылку на новый объект в куче? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2005, 10:28 |
|
||
|
FAQ. Миф 1-ый.
|
|||
|---|---|---|---|
|
#18+
rimanПричем здесь изменяемость/неизменяемость? Я что, не могу присвоить ссылку на новый объект в куче? Наверное не все уловили мой сарказм :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2005, 10:46 |
|
||
|
FAQ. Миф 1-ый.
|
|||
|---|---|---|---|
|
#18+
NotGonnaGetUs rimanПричем здесь изменяемость/неизменяемость? Я что, не могу присвоить ссылку на новый объект в куче? Наверное не все уловили мой сарказм :(я уловил, не расстраивайся :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2005, 10:52 |
|
||
|
FAQ. Миф 1-ый.
|
|||
|---|---|---|---|
|
#18+
Чрезвычайно интересно. еще про "Миф n-й: перегрузка операторов", пожалуйста. Почему это для String "+" перегружен, может и у этого дела есть анатомия? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2005, 11:02 |
|
||
|
FAQ. Миф 1-ый.
|
|||
|---|---|---|---|
|
#18+
J--Чрезвычайно интересно. еще про "Миф n-й: перегрузка операторов", пожалуйста. Почему это для String "+" перегружен, может и у этого дела есть анатомия? перегрузки операторов нет. значит, нет мифа. почему для String возможен оператор "+" - так определено спецификацией языка :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2005, 11:15 |
|
||
|
FAQ. Миф 1-ый.
|
|||
|---|---|---|---|
|
#18+
засрале топег! (с) народное творчество. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2005, 11:23 |
|
||
|
FAQ. Миф 1-ый.
|
|||
|---|---|---|---|
|
#18+
2riman: не было такого. J--Чрезвычайно интересно. еще про "Миф n-й: перегрузка операторов", пожалуйста. Почему это для String "+" перегружен, может и у этого дела есть анатомия? Анатомия - что бы от System.out не тошнило :) А вообще, мне кажется, это следствие желания сделать из String аналог "примитивного" типа. Кроме '==' к объектам не может быть применён ни один оператор. '+' применяется к object.toString() только в контексте конкатации строк (один из операторов явный String). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2005, 11:26 |
|
||
|
FAQ. Миф 1-ый.
|
|||
|---|---|---|---|
|
#18+
riman Ctrl+Alt+DeleteНикакого мифа здесь нет. Все дело в том, что в Java объекты типа String являются НЕИЗМЕНЯЕМЫМИ ! Поэтому orig_parameter всегда указывает на строку "the original string" Для работы с изменяемыми строками служит StringBuffer Причем здесь изменяемость/неизменяемость? Я что, не могу присвоить ссылку на новый объект в куче? можешь вот пример, который работает: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2005, 11:26 |
|
||
|
FAQ. Миф 1-ый.
|
|||
|---|---|---|---|
|
#18+
Ctrl+Alt+Delete Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Это пример чего? :) Бесполезного вызова replace, который создаёт новый String, но который никто не использует? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2005, 11:28 |
|
||
|
FAQ. Миф 1-ый.
|
|||
|---|---|---|---|
|
#18+
NotGonnaGetUs Ctrl+Alt+Delete [/src] Это пример чего? :) Бесполезного вызова replace, который создаёт новый String, но который никто не использует? Тьфу, там же StringBuffer. Всё равно не понял к чему пример :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2005, 11:32 |
|
||
|
FAQ. Миф 1-ый.
|
|||
|---|---|---|---|
|
#18+
rimanзасрале топег! (с) народное творчество. патпесался. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2005, 11:36 |
|
||
|
FAQ. Миф 1-ый.
|
|||
|---|---|---|---|
|
#18+
NotGonnaGetUs NotGonnaGetUs Ctrl+Alt+Delete [/src] Это пример чего? :) Бесполезного вызова replace, который создаёт новый String, но который никто не использует? Тьфу, там же StringBuffer. Всё равно не понял к чему пример :( пример что строковые объекты передаются по ссылке, и что пример со String - это особый случай ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2005, 11:38 |
|
||
|
FAQ. Миф 1-ый.
|
|||
|---|---|---|---|
|
#18+
Ctrl+Alt+Deleteпример что строковые объекты передаются по ссылке, и что пример со String - это особый случай Хмм. А где говорилось, что String чем-то отличается от других объектов java ? Напиши toChange = new StringBuffer("new string") и будет тоже самое. Об этом и пишет автор топика. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2005, 11:45 |
|
||
|
FAQ. Миф 1-ый.
|
|||
|---|---|---|---|
|
#18+
остановитесь!!! -- Lacrima Mosa Est ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2005, 11:50 |
|
||
|
FAQ. Миф 1-ый.
|
|||
|---|---|---|---|
|
#18+
авторпример что строковые объекты передаются по ссылке, и что пример со String - это особый случай Б*** я вообще то пытался объяснить простой пример, который работает на Сишнике и который работает иначе на жабе. Если не мешать "указатели и ссылки" (в доках пишут именно "ссылка"). Попробуйте написать на сишнике код где в функцию передается ссылка на объект и в ней объект изменяется (перенаправляется ссылка, удаляется, режется ;№%*(?№;(%?; и т.д. короче). Что получим после отработки функции? Редактированный объект! ЗЫ. С Це давно не работал, может быть "указатели" и "ссылка" использую наоборот. Но вроде суть выразил. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2005, 11:52 |
|
||
|
FAQ. Миф 1-ый.
|
|||
|---|---|---|---|
|
#18+
riman Б*** я вообще то пытался объяснить простой пример, который работает на Сишнике и который работает иначе на жабе. сорри ...торможу ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2005, 12:54 |
|
||
|
FAQ. Миф 1-ый.
|
|||
|---|---|---|---|
|
#18+
riman авторпример что строковые объекты передаются по ссылке, и что пример со String - это особый случай Б*** я вообще то пытался объяснить простой пример, который работает на Сишнике и который работает иначе на жабе. Если не мешать "указатели и ссылки" (в доках пишут именно "ссылка"). Попробуйте написать на сишнике код где в функцию передается ссылка на объект и в ней объект изменяется (перенаправляется ссылка, удаляется, режется ;№%*(?№;(%?; и т.д. короче). Что получим после отработки функции? Редактированный объект! ЗЫ. С Це давно не работал, может быть "указатели" и "ссылка" использую наоборот. Но вроде суть выразил. на яве не программил но думаю в .NET'e аналогичная ситуёвина, объясняю. в .нете стринг это тоже reference type (ну тобишь ссылочный), любая манипуляция со строкой ведет к созданию новой строки.. что происходитт когда ты передаеш в метод параметр? он ВСЕГДА копируется. у тебя есть два типа параметров - просто стековые объекты и указатели. в первом случае копируется весь объект, поэтому изменений по выходу ты не увидиш. строка - не стековый, тоесть из кучи, передается как указатель, НО, что такое указатель, то две области памяти. первая находится в стэке - это адрес ( просто int - просто число - которое трактуется как адрес в куче), так вот копируется этот самый адрес, но в твоем случае ты пытаешся чикнуть адрес - который есть копией. ну а что с byRef параметром? есть такая конструкция сишная int* - указатель на инт, а есть int** - указатель на указатель, так вот byRef - это указатель на указатель, в этом случае ты могеш менять даже саму ссылку.. вот еще один банальный пример: Код: plaintext 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.01.2005, 13:40 |
|
||
|
FAQ. Миф 1-ый.
|
|||
|---|---|---|---|
|
#18+
Лиман Артёмна яве не программил но думаю в .NET'e аналогичная ситуёвина, объясняю. ... я ясно объяснил? забавная "ситуевина" :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2005, 13:49 |
|
||
|
FAQ. Миф 1-ый.
|
|||
|---|---|---|---|
|
#18+
Timm Лиман Артёмна яве не программил но думаю в .NET'e аналогичная ситуёвина, объясняю. ... я ясно объяснил? забавная "ситуевина" :) на самом деле ничего смешного, при проэктировании технологии .NET многое взялось из явы (включая и синтаксис), и работа со строками от явы же, так что можно проводить аналогию ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2005, 13:52 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=32881868&tid=2153050]: |
0ms |
get settings: |
7ms |
get forum list: |
13ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
149ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
61ms |
get tp. blocked users: |
1ms |
| others: | 204ms |
| total: | 451ms |

| 0 / 0 |
