|
|
|
почему так? про передачу ссылочного типа
|
|||
|---|---|---|---|
|
#18+
почему следующая программа выводит тут1: 10 тут2: 20, не 10 10, объясните плиз, почему ссылки с одним именем действуют как разные class ValHold{ public int i = 10; } public class A{ public static void main(String argv[]){ A o = new A(); o.amethod(); } public void amethod(){ ValHold v = new ValHold(); v.i = 30; another(v); System.out.println("тут2: " + v.i); }//End of amethod public void another(ValHold v){ v.i = 20; v = new ValHold(); System.out.println("тут1: " + v.i); }//End of another } ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2007, 17:43:13 |
|
||
|
почему так? про передачу ссылочного типа
|
|||
|---|---|---|---|
|
#18+
I class ValHold{ public int i = 10; } public class A{ public static void main(String argv[]){ A o = new A(); o.amethod(); } public void amethod(){ ValHold v = new ValHold(); //Создаешь новый экземпляр ValHold (назовем его ValHold_1) и присваеваешь ссылку на него переменной v v.i = 30; // ValHold_1.i = 30 another(v); //Передаешь ссылку на ValHold_1 в another System.out.println("тут2: " + v.i);//Переменная v ссылается на ValHold_1, т.е. печатаем 20 }//End of amethod public void another(ValHold v){ //Получили ссылку на ValHold_1 и присвоили ее переменной v v.i = 20; // ValHold_1.i = 20 v = new ValHold();//Создаешь новый экземпляр ValHold (назовем его ValHold_2) и присвоили ссылку на него переменной v. ValHold_2.i = 10 (выставляется в конструкторе) System.out.println("тут1: " + v.i);//Переменная v ссылается на ValHold_2, т.е. печатаем 10 }//End of another } ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2007, 18:02:45 |
|
||
|
почему так? про передачу ссылочного типа
|
|||
|---|---|---|---|
|
#18+
Объект ValHold передается по ссылке а не по значению, т.е. меняя значение ссылки в методе another(ValHold v) (...v = new ValHold();...) вы не меняеете сам обьект созданный в методе amethod() ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2007, 18:04:20 |
|
||
|
почему так? про передачу ссылочного типа
|
|||
|---|---|---|---|
|
#18+
Если этих объяснений недостаточно то почитай какие-нибудь книги по яве - особенно области видимости переменных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2007, 18:04:36 |
|
||
|
почему так? про передачу ссылочного типа
|
|||
|---|---|---|---|
|
#18+
спасибо всем теперь буду знать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2007, 18:09:23 |
|
||
|
почему так? про передачу ссылочного типа
|
|||
|---|---|---|---|
|
#18+
Вообще то, в Жаве нет передачи параметров по ссылке, параметры всегда передаються по значению. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. Даже когда вы передаете в метод ссылочный объект, он передаеться по значению. т.е. создается копия и она передаеться. И как вы эту копию не изменяйте это не будет иметь никаго эффекта, единственное что вы можете сделать это изменить состояние объекта через эту ссылку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2007, 09:35:36 |
|
||
|
почему так? про передачу ссылочного типа
|
|||
|---|---|---|---|
|
#18+
параметры передаються по значениВообще то, в Жаве нет передачи параметров по ссылке, параметры всегда передаються по значению. ... Даже когда вы передаете в метод ссылочный объект, он передаеться по значению. т.е. создается копия и она передаеться. И как вы эту копию не изменяйте это не будет иметь никаго эффекта, единственное что вы можете сделать это изменить состояние объекта через эту ссылку. чево? передается копия ссылки, но объект по этой ссылке - тот же. твой пример переложил ссылку из одной локальной переменной в другую, ни не меняя ссылки в вызвавшем методе, ни объекты по этим ссылкам. твои объяснения могут сбить с толку, человек может подумать, что копируется объект, а не ссылка я бы так сказал Даже когда вы передаете в метод ссылочный объект, он передается по значению (передается значение ссылки) . т.е. создается копия ссылки и она передаеться. И как вы эту копию ссылки не изменяйте это не будет иметь никаго эффекта, единственное что вы можете сделать это изменить состояние объекта через эту ссылку. а так бы я вообще не говорил про объектные параметры. только про примитивные авторВообще то, в Жаве нет передачи параметров по ссылке, параметры всегда передаються по значению. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2007, 09:57:58 |
|
||
|
почему так? про передачу ссылочного типа
|
|||
|---|---|---|---|
|
#18+
аувв Даже когда вы передаете в метод ссылочный объект, он передается по значению (передается значение ссылки) . т.е. создается копия ссылки и она передаеться. И как вы эту копию ссылки не изменяйте это не будет иметь никаго эффекта, единственное что вы можете сделать это изменить состояние объекта через эту ссылку. да, думаю что так стало понятней. А примером я хотел показать, что передаються копии ссылок и их "перестановка" ничего не дает. Утверждение что в java параметры передаються по значению, по моему вполне нормальное. В языках программирования передача параметров есть: по ссылке, по значению. Например в C++ пример есть передача параметров по ссылке, но в java ведь ее нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2007, 10:53:03 |
|
||
|
почему так? про передачу ссылочного типа
|
|||
|---|---|---|---|
|
#18+
параметры передаються по значениВообще то, в Жаве нет передачи параметров по ссылке, параметры всегда передаються по значению.чиво? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. если параметр передается по значению, почему меняется его размер? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2007, 11:05:50 |
|
||
|
почему так? про передачу ссылочного типа
|
|||
|---|---|---|---|
|
#18+
Параметры передаються по значениУтверждение что в java параметры передаються по значению, по моему вполне нормальное.да нискока ненормальное. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2007, 11:06:21 |
|
||
|
почему так? про передачу ссылочного типа
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Сообственно что тут происходит? 1. Когда передаеться параметр, то создается новая объектная ссылка на тот же самый ArrrayList и теперь у вас две ссылки которые ссылаються на один объект. 2. Передаеться эта новая ссылка. 3. Вы через эту ссылку изменяете состояние объека, а не саму ссылку. а вы попробуйте поменять саму ссылку. Какой будет результат? Например Код: plaintext 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2007, 14:42:00 |
|
||
|
почему так? про передачу ссылочного типа
|
|||
|---|---|---|---|
|
#18+
The Java programming language does not pass objects by reference; it passes object references by value. Because two copies of the same reference refer to the same actual object, changes made through one reference variable are visible through the other. There is exactly one parameter passing mode -- pass by value -- and that helps keep things simple. -- James Gosling, et al., The Java Programming Language, 4th Edition ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2007, 15:10:46 |
|
||
|
почему так? про передачу ссылочного типа
|
|||
|---|---|---|---|
|
#18+
James GoslingThe Java programming language does not pass objects by reference; it passes object references by value.вот и товарищь гослинг говорит: передает ссылки на объекты по значению. а не просто "объекты по значению". правда сакральную разницу между передачей объектов по ссылке и передачей значения ссылки на объект я не понимаю.... ну и ладно. это наверно че-то там в си или в бейсике необычное. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2007, 15:27:20 |
|
||
|
почему так? про передачу ссылочного типа
|
|||
|---|---|---|---|
|
#18+
Что произошло?а вы попробуйте поменять саму ссылку. Какой будет результат? Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2007, 15:31:33 |
|
||
|
почему так? про передачу ссылочного типа
|
|||
|---|---|---|---|
|
#18+
А.Грасоff™если параметр передается по значению, почему меняется его размер? Потому что изменяется размер объекта на который указывает параметр List list метода. Все абсолютно правильно - в Java параметры передаются только по значению. Ваша переменная List list = new ArrayList(); всегда будет указавать на созданные объект new ArrayList сколько вы не будете вызывать метод наподобие следущего: Код: 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. Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2007, 15:40:09 |
|
||
|
почему так? про передачу ссылочного типа
|
|||
|---|---|---|---|
|
#18+
йолки. я понял. госслинг хотел объяснить как попроще, а только людей с толку сбил! он же гений. как эйнштейн наших дней. отсюда и постоянные вопросы. а им вответ госслинговское "все просто: все только по значению". забывая добавить, что "значением в случае объектов является ссылка". не все такие гении, как госслинх. надо чуть больше слов говорить, чтоб проще оказывалось. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2007, 15:41:18 |
|
||
|
почему так? про передачу ссылочного типа
|
|||
|---|---|---|---|
|
#18+
слава богу I (или l, в общем, автор топика) давно ушла вместе с правильным пониманием как все работает, либо читать книжку. и мозги у ней не свихнуцца, глядя как гуры выпендириваются друг перед другом в этом важном вопросе соверменных веб-технологий ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2007, 15:44:58 |
|
||
|
почему так? про передачу ссылочного типа
|
|||
|---|---|---|---|
|
#18+
Нет, Гослинг пишет не для гениев современности. Гослинг пишет для тех, кого в ВУЗе учили программированию, и кто в ВУЗе учился программированию. Просто в книгах также пишут, что все переменные, которые указывают на объект, на самом деле ссылки на объект. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2007, 16:34:19 |
|
||
|
почему так? про передачу ссылочного типа
|
|||
|---|---|---|---|
|
#18+
Во флуда то сколько на пустом месте развели... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2007, 16:40:03 |
|
||
|
почему так? про передачу ссылочного типа
|
|||
|---|---|---|---|
|
#18+
LeonidvПросто в книгах также пишут, что все переменные, которые указывают на объект, на самом деле ссылки на объект.или можно по-другому сказать. переменные, которые ссылаются на объект, на самом деле указатели на объект. если еще раз заменить синонимы: в книгах пишут, что ссылки на объект - на самом деле ссылки на объект. чтоб совсем сократить повторы, скажем так: в книгах ничего не пишут :)) и в Вузах это преподают тем, кто учится программированию (одновременно и тем, кого учат программированию) ой не могу, остановите меня! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2007, 16:45:44 |
|
||
|
почему так? про передачу ссылочного типа
|
|||
|---|---|---|---|
|
#18+
ауввой не могу, остановите меня! Санитары, кляп! И смирительную рубашку! :D ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2007, 18:39:08 |
|
||
|
почему так? про передачу ссылочного типа
|
|||
|---|---|---|---|
|
#18+
Уже были здесь топики на 100% схожие с этим. И там выяснялось, что путаница происходит из-за следующих фраз : параметры передаються по значениВообще то, в Жаве нет передачи параметров по ссылке, параметры всегда передаються по значению. Правильнее сказать так: авторв Жаве нет передачи параметров по ссылке, параметры всегда передаються по значению ссылки . Ибо ссылка - это адрес ячейки памяти + то что в этой ячейки записано. А значение ссылки - это только то, что находится в ячейки пямяти. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2007, 10:29:16 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=34434605&tid=2146187]: |
0ms |
get settings: |
14ms |
get forum list: |
26ms |
check forum access: |
6ms |
check topic access: |
6ms |
track hit: |
77ms |
get topic data: |
17ms |
get forum data: |
4ms |
get page messages: |
90ms |
get tp. blocked users: |
2ms |
| others: | 336ms |
| total: | 578ms |

| 0 / 0 |
