![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| Samotnik |
|
||||
![]() Super star ! ![]() ![]() ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 7192 Регистрация: 4.11.2006 Где: Минск City Репутация: 8 Всего: 191 |
Добрый день!
Любопытно узнать чем отличается запись (в смысле что происходит со значениями) тут
и тут
|
||||
|
|||||
| ekr |
|
|||
![]() ...и это пройдет... ![]() ![]() Профиль Группа: Участник Сообщений: 359 Регистрация: 6.5.2007 Где: Moscow, RU Репутация: 3 Всего: 19 |
java.lang.Integer - класс, т.е. x во втором примере - объект, экземпляр класса. У него "внутри" будет свойство типа int со значением 3.
Оболочки (обертки, wrappers) нужны, когда: 1. актуально передавать в методы значения по ссылке 2. у классов-оберток куча полезных утилитарных методов, например парсинг строки в число |
|||
|
||||
| w1nd |
|
|||
![]() Вертилятор ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1077 Регистрация: 22.3.2006 Где: Москва Репутация: 20 Всего: 54 |
+reflection (простые типы не являются объектами).
-------------------- ![]() ![]() |
|||
|
||||
| batigoal |
|
|||
![]() Нелетучий Мыш ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6423 Регистрация: 28.12.2004 Где: Санктъ-Петербургъ Репутация: 24 Всего: 151 |
Вплоть до Java 5, класть в коллекции простые типы было невозможно. Это тоже делалось с помощью обёрток. Однако сейчас этого ограничения нет.
-------------------- "Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли) ЖоржЖЖ |
|||
|
||||
| Samotnik |
|
||||||
![]() Super star ! ![]() ![]() ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 7192 Регистрация: 4.11.2006 Где: Минск City Репутация: 8 Всего: 191 |
2 all
Пасибо вам за ответ, просто я это знаю все, я в шилде и ноутоне прочитал Так вот вопрос(просто сразу не обьяснил, время не было): Сматрите:
Это значит, если значение икс, передать в метод(ну допустим x++) то оно не измениться, т.е. измениться только копия, с кот мы будем работать, так?!?!? А вот если
То это означает, если передать значение в метод(x++), то значение измениться, т.к. переданно по ссылке(т.е. работаем непосредственно с самим значением икса) Так?!?!? И вот что получается, я набрасал примерчик элементарный
И в итоге получилось, что и по ссылке и по значению, получается одинаковый результат Может я че не понимаю? Просто интересен вопрос очень!!! обьясните плз, кто знает!! |
||||||
|
|||||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15719 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
На самом деле там происходит скрытый враппинг, и об этом не стоит забывать. Там можно и NullPointerException получить, плюс накладные расходы. Нет не так -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
| nornad |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1079 Регистрация: 16.2.2007 Где: в Караганде Репутация: 16 Всего: 31 |
А где ты передаёшь по ссылке и где по значению? Я даже уточню, чтобы понятнее было - где ты вообще хоть что-то передаёшь? Вот уж в самую точку попал. Теперь по поводу сути твоего вопроса. Если коротко и ясно:
Возможно, придётся немного подправить, т.к. писал вслепую и мог опечататься. -------------------- Три достоинства программиста: Леность, Нетерпение и Гордость Ларри Уолл |
||||
|
|||||
| Samotnik |
|
|||
![]() Super star ! ![]() ![]() ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 7192 Регистрация: 4.11.2006 Где: Минск City Репутация: 8 Всего: 191 |
2 LSD
А что такое врапперы? 2 nornad Код ошибку выдавал, вот тута
Но это не важно, я закоментил, все что связанно с тест3. Получилось, что 2 метода(1, 2) выдавали один и тот же результат! Э... Просто я думал, что в Java автоматически передаються аргументы, если простых типов - по значению, сложных - по ссылке. |
|||
|
||||
| nornad |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1079 Регистрация: 16.2.2007 Где: в Караганде Репутация: 16 Всего: 31 |
В том-то всё и дело, что важно. Куда они должны передаваться? У меня подозрения, что ты не понимаешь основ - чтобы аргументы передавались хоть как-то, они должны хотя бы вообще быть. А у тебя они где? Ну, покажи хоть один? Кроме неявного this, который всегда по ссылке. Mea culpa... Хотя, ошибку он выдал и не совсем там - я забыл инициализировать переменную, да и выводить надо было не её, а её поле. Исправляю:
Добавлено через 2 минуты и 10 секунд Враппер - wrapper - объект-обёртка. В моём примере Test3 как раз и есть враппер. Другое дело, что его суть не сильно информативна, но для примера сойдёт. -------------------- Три достоинства программиста: Леность, Нетерпение и Гордость Ларри Уолл |
|||
|
||||
| Samotnik |
|
||||
![]() Super star ! ![]() ![]() ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 7192 Регистрация: 4.11.2006 Где: Минск City Репутация: 8 Всего: 191 |
Ну допустим так... Тогда возьмем пример
Это по вашему передача аргумента?? |
||||
|
|||||
| Samotnik |
|
|||
![]() Super star ! ![]() ![]() ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 7192 Регистрация: 4.11.2006 Где: Минск City Репутация: 8 Всего: 191 |
2 nornad
Все!! с кодом разобрался, и все понял, теперь хотелось бы вернуться к началу Знчит, возьмем твой пример. Результат его следущий : 0, 0, 1. Т.е. получается, что по значению передались int x и Integer x, а обьект как ему и положено передался по ссылке, и соотвно значение изменилось. Внимание вопрос: Почему Integer x передался по значению, ведь это ОБОЛОЧКА и соответственно должен являться объектом и передоваться по ссылке, как и пологается всем обьектам? Ведь даже создался обьект
А передалось по значению, а не по сылке ?!?! Меня вот этот вопрос интересовал, то что если написать int x; или Integer x; (ну и передовать их дальше есстно) получается разницы ни какой? В любом случае передается все по значению, так? |
|||
|
||||
| nornad |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1079 Регистрация: 16.2.2007 Где: в Караганде Репутация: 16 Всего: 31 |
Не совсем. int - по значению. Integer и Test3 - по ссылке, как и все объекты. Но! Важный момент - ссылка в жабе это далеко не то же самое, что и ссылка в си. Саму ссылку ты здесь изменить не можешь (потому-то случай с Integer работает, как и с int), но можно изменить поля объекта, на который ссылается эта ссылка (поэтому вариант с Test3 сработал). -------------------- Три достоинства программиста: Леность, Нетерпение и Гордость Ларри Уолл |
|||
|
||||
| Samotnik |
|
|||
![]() Super star ! ![]() ![]() ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 7192 Регистрация: 4.11.2006 Где: Минск City Репутация: 8 Всего: 191 |
2 nornad
Вот теперь понятно!!! Только это ..... Вопрос 1: Что такое поле обьекта, и почему его можно изменить? Вопрос 2: Integer x вообще никаким способом передать нельзя, чтобы она сработала как НАСТОЯЩИЙ обьект, и изменила свое значение??? |
|||
|
||||
| nornad |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1079 Регистрация: 16.2.2007 Где: в Караганде Репутация: 16 Всего: 31 |
В примере это Test3.test3 (интовое поле, инициализирующееся нулём). Потому что мы передаём в метод ссылку на объект. Саму ссылку менять нельзя, но можно менять данные, на которые она ссылается.
Напрямую - нет. Сделай обёртку (скажем, IntegerX), которая будет содержать поле Integer x и передавай её, если так уж надо. Но! Изменение принимаемого параметра есть плохой стиль. Здесь вам не тут и не надо использовать подход чистого си (даже в с++ не рекомендуется таким заниматься). В подавляющем большинстве случаев необходимость изменения входящего параметра (с неявным возвратом значения) вызвана отсутствием проектировки и кривыми руками кодера. -------------------- Три достоинства программиста: Леность, Нетерпение и Гордость Ларри Уолл |
|||
|
||||
| fixxer |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 672 Регистрация: 14.9.2006 Где: Саратов, Россия Репутация: 6 Всего: 27 |
Цитата из http://skipy.developer.juga.ru/technics/references.html
-------------------- ![]() |
|||
|
||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |