|
|
|
Обмен объектов (метод swap)
|
|||
|---|---|---|---|
|
#18+
Захотелось потренироваться, попереписывать стандартные алгортимы в Java. Сразу же столкнулся с проблемой: После отработки метода Код: java 1. 2. 3. 4. 5. входные параметры не меняются на своих местах. На англоязычных форумах пишут, что это из-за того, что объекты в Java передаются по ссылке. 1. Ссылка, как я понимаю, это аналог указателя в Си. Почему в данном случае не происходит обмен адресов между указателями? 2. Насколько безопасен такой код: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2012, 23:47:08 |
|
||
|
Обмен объектов (метод swap)
|
|||
|---|---|---|---|
|
#18+
amigaboy , читайте до полного просветления . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2012, 00:20:01 |
|
||
|
Обмен объектов (метод swap)
|
|||
|---|---|---|---|
|
#18+
amigaboy1. Ссылка, как я понимаю, это аналог указателя в Си. P.S. И, кстати... Указатель - это указатель. А ссылка - это ссылка. Возьмите справочник по C/C++ и найдите отличия. Так... Чисто для общей прокачки... И передача параметров по адресу != передаче параметров по ссылке. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2012, 00:24:43 |
|
||
|
Обмен объектов (метод swap)
|
|||
|---|---|---|---|
|
#18+
Ruslan.Isbarov amigaboy , читайте до полного просветления . Столько воды.. А даже не сказал, что параметры метода (фактически копии ссылок) хранятся в стеке. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2012, 07:39:09 |
|
||
|
Обмен объектов (метод swap)
|
|||
|---|---|---|---|
|
#18+
amigaboyЗахотелось потренироваться, попереписывать стандартные алгортимы в Java. Сразу же столкнулся с проблемой: После отработки метода Код: java 1. 2. 3. 4. 5. входные параметры не меняются на своих местах. На англоязычных форумах пишут, что это из-за того, что объекты в Java передаются по ссылке. 1. Ссылка, как я понимаю, это аналог указателя в Си. Почему в данном случае не происходит обмен адресов между указателями? 2. Насколько безопасен такой код: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. ты сделал мой день. 1-й вариант конечно же не пашет, так как ссылки в джаве - это не ссылки в с++, а скорее указатели, которые разыминовываются неявно. 2-й я бы побоялся назвать безопасным, так как реализация класса стринг - может поменяться. Да и вообще - строки по определению - неизменяемые, а ты нарушаешь это определение, что может привести к багам, как из-за жавовского оптимизатора, так и из-за программистов, которые уверены что строка изменится не может. единственный вариант - создать класс "указатель на строку", и для него можно написать ф-ю swap. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2012, 08:54:15 |
|
||
|
Обмен объектов (метод swap)
|
|||
|---|---|---|---|
|
#18+
mesier , да ТС-у и этого будет предостаточно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2012, 10:03:12 |
|
||
|
Обмен объектов (метод swap)
|
|||
|---|---|---|---|
|
#18+
ZyK_BotaN2-й я бы побоялся назвать безопасным, так как реализация класса стринг - может поменяться. Да и вообще - строки по определению - неизменяемые, а ты нарушаешь это определение, что может привести к багам, как из-за жавовского оптимизатора, так и из-за программистов, которые уверены что строка изменится не может. Да тут больше проблема в том, что ТС подменяет value, но совершенно забывает о offset и count. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2012, 12:19:40 |
|
||
|
Обмен объектов (метод swap)
|
|||
|---|---|---|---|
|
#18+
Большой Синий КитZyK_BotaN2-й я бы побоялся назвать безопасным, так как реализация класса стринг - может поменяться. Да и вообще - строки по определению - неизменяемые, а ты нарушаешь это определение, что может привести к багам, как из-за жавовского оптимизатора, так и из-за программистов, которые уверены что строка изменится не может. Да тут больше проблема в том, что ТС подменяет value, но совершенно забывает о offset и count. не вглублялся в код, но изменять неизменяемый объект - это нонсенс )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2012, 12:20:45 |
|
||
|
Обмен объектов (метод swap)
|
|||
|---|---|---|---|
|
#18+
P.S. Код левый к тому же :)) String.class.get("value"); - это что такое? :)) Такого метода вообще в природе не существует. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2012, 12:23:07 |
|
||
|
Обмен объектов (метод swap)
|
|||
|---|---|---|---|
|
#18+
Большой Синий КитP.S. Код левый к тому же :)) String.class.get("value"); - это что такое? :)) Такого метода вообще в природе не существует. я подумал - что интроспекция. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2012, 12:24:25 |
|
||
|
Обмен объектов (метод swap)
|
|||
|---|---|---|---|
|
#18+
ZyK_BotaN, Да и поле ведь final! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2012, 12:25:02 |
|
||
|
Обмен объектов (метод swap)
|
|||
|---|---|---|---|
|
#18+
ZyK_BotaN, Я к тому, что автор жжет. Пишет что-то вообще левое. :)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2012, 12:26:34 |
|
||
|
Обмен объектов (метод swap)
|
|||
|---|---|---|---|
|
#18+
Большой Синий КитZyK_BotaN, Я к тому, что автор жжет. Пишет что-то вообще левое. :)) может тролль какой ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2012, 12:27:47 |
|
||
|
Обмен объектов (метод swap)
|
|||
|---|---|---|---|
|
#18+
Правильный ответ: amigaboy 2. Насколько безопасен такой код: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Он СОВЕРШЕННО безопасен, потому что не компилируем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2012, 12:28:06 |
|
||
|
Обмен объектов (метод swap)
|
|||
|---|---|---|---|
|
#18+
Большой Синий КитПравильный ответ: amigaboy2. Насколько безопасен такой код: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Он СОВЕРШЕННО безопасен, потому что не компилируем. записал у цитатник компьютерного юмора. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2012, 12:32:01 |
|
||
|
Обмен объектов (метод swap)
|
|||
|---|---|---|---|
|
#18+
amigaboy, вот так работает Код: 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. но зачем болт забивать молотком? Мне кажется setAccessible() нужно использовать в крайних случаях, чтобы реализовать какие-нибудь замысловатые "доступы", типа friendly класс. А в остальном - это больше на хакерство какое-то смахивает, которое может привести к непредсказуемым последствиям. В этом плане, конечно, код нифига не безопасный. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2012, 12:53:08 |
|
||
|
Обмен объектов (метод swap)
|
|||
|---|---|---|---|
|
#18+
Miha_S7amigaboy, вот так работает Код: 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. но зачем болт забивать молотком? Мне кажется setAccessible() нужно использовать в крайних случаях, чтобы реализовать какие-нибудь замысловатые "доступы", типа friendly класс. А в остальном - это больше на хакерство какое-то смахивает, которое может привести к непредсказуемым последствиям . В этом плане, конечно, код нифига не безопасный. мягко сказано. класс стринг - изначально считается неизменямым, что позваляет жвм делать оптимизации, плюс сами программисты уверены в корректности кода(например в когерентности кешей). этот код не то что небезопасный, он опасный, я бы даже сказал - вредительский. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2012, 12:55:51 |
|
||
|
Обмен объектов (метод swap)
|
|||
|---|---|---|---|
|
#18+
Ну взял я первый попавшийся на stackoverfow кусок кода, скопипастил. Чего прицепились? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2012, 14:36:07 |
|
||
|
Обмен объектов (метод swap)
|
|||
|---|---|---|---|
|
#18+
amigaboyНу взял я первый попавшийся на stackoverfow кусок кода, скопипастил. Чего прицепились? :) не делай больше так. если нужна ф-я swap для строк, то сделай класс-ссылку на строку. class StringRef { pulibc String s; } и работай с ним. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2012, 14:40:14 |
|
||
|
Обмен объектов (метод swap)
|
|||
|---|---|---|---|
|
#18+
ZyK_BotaNamigaboyНу взял я первый попавшийся на stackoverfow кусок кода, скопипастил. Чего прицепились? :) не делай больше так. если нужна ф-я swap для строк, то сделай класс-ссылку на строку. class StringRef { pulibc String s; } и работай с ним.А если я хочу для универсальности использовать generics? Скажем <E extends Comparable> ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2012, 14:41:44 |
|
||
|
Обмен объектов (метод swap)
|
|||
|---|---|---|---|
|
#18+
amigaboyZyK_BotaNпропущено... не делай больше так. если нужна ф-я swap для строк, то сделай класс-ссылку на строку. class StringRef { pulibc String s; } и работай с ним.А если я хочу для универсальности использовать generics? Скажем <E extends Comparable> делай что хочешь, но изменять неизменяемый объект - это вредительство а не программирование. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2012, 14:42:24 |
|
||
|
Обмен объектов (метод swap)
|
|||
|---|---|---|---|
|
#18+
amigaboy, ну и кто тебе дженерик реф мешает сделать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2012, 14:42:57 |
|
||
|
Обмен объектов (метод swap)
|
|||
|---|---|---|---|
|
#18+
ZyK_BotaNделай что хочешь, но изменять неизменяемый объект - это вредительство а не программирование.Значит баблсорт не для Джавы? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2012, 14:45:09 |
|
||
|
Обмен объектов (метод swap)
|
|||
|---|---|---|---|
|
#18+
amigaboyZyK_BotaNделай что хочешь, но изменять неизменяемый объект - это вредительство а не программирование.Значит баблсорт не для Джавы? :) че не для джавы. просто нах тебе ф-я swap? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2012, 14:46:41 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=37626993&tid=2132761]: |
0ms |
get settings: |
10ms |
get forum list: |
23ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
47ms |
get topic data: |
15ms |
get forum data: |
4ms |
get page messages: |
86ms |
get tp. blocked users: |
2ms |
| others: | 334ms |
| total: | 531ms |

| 0 / 0 |
