![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
ChessMaster |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 50 Регистрация: 1.8.2007 Репутация: нет Всего: нет |
Запутался с тем, как передать значение по сслыке, а как по значению.
Дело в том, что monkey != cageMonkey.get(0); То есть вклетки сидит мартышка с другой температурой. |
|||
|
||||
agR |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 140 Регистрация: 19.7.2006 Где: Киев Репутация: 2 Всего: 2 |
Честно говоря из примера мало что понятно. В Java параметры передаются по значению... для объектных переменных значениями являются ссылки. Попытался сделать, че-то по твоей идее, вот что получилось:
П.С. А ты код прям на форуме набирал? ![]() |
||||
|
|||||
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Объекты всегда передаются по ссылке, а примитивные типы по значению.
-------------------- 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. |
|||
|
||||
agR |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 140 Регистрация: 19.7.2006 Где: Киев Репутация: 2 Всего: 2 |
LSD,
и
Как по мне, то те же грабли, тока в профиль. Читал книгу, так там акцент как раз и делался, что в java передается по значению... и утверждение "по ссылке" - ошибочно. Кому верить? ![]() |
|||
|
||||
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Для объектов передается копия ссылки на этот объект. И мы можем в теле метода изменить переданную копию ссылки, присвоив ей другой объект.
-------------------- 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. |
|||
|
||||
ChessMaster |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 50 Регистрация: 1.8.2007 Репутация: нет Всего: нет |
||||
|
||||
fixxer |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 672 Регистрация: 14.9.2006 Где: Саратов, Россия Репутация: 6 Всего: 27 |
Боюсь, LSD ввел в небольшое заблуждение. Изменение (переприсваивание) ссылки возымеет действие только в пределах метода. Ключевая фраза "передается копия ссылки на этот объект".
-------------------- ![]() |
|||
|
||||
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
-------------------- 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. |
|||
|
||||
fixxer |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 672 Регистрация: 14.9.2006 Где: Саратов, Россия Репутация: 6 Всего: 27 |
Да, безусловно, только пример не отражает фразу
-------------------- ![]() |
|||
|
||||
nornad |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1079 Регистрация: 16.2.2007 Где: в Караганде Репутация: 16 Всего: 31 |
А как же это:
![]() -------------------- Три достоинства программиста: Леность, Нетерпение и Гордость Ларри Уолл |
|||
|
||||
fixxer |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 672 Регистрация: 14.9.2006 Где: Саратов, Россия Репутация: 6 Всего: 27 |
Да, сорри. Не заметил. Ну тогда будут выведены разные значения внутри и вне метода. Наверно LSD это и хотел продемонстрировать.
![]() -------------------- ![]() |
|||
|
||||
chief39 |
|
|||
![]() карманная тигра ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1631 Регистрация: 20.5.2005 Где: Киев Репутация: 15 Всего: 77 |
Нифига се профиль!!! ![]()
Если надо сугубо по значению - тогда clone() объекта и передача клона в качестве параметра. -------------------- Люди - это свечи. Они либо горят, либо их - в жопу!(с) |
|||
|
||||
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Ага ![]() Передать по значению нельзя, но можно это дело эмулировать клоном для изменяемых объектов, а для неизменяемых просто передавать как есть. -------------------- 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. |
|||
|
||||
Fedrus |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 130 Регистрация: 20.9.2007 Репутация: нет Всего: нет |
Как раз сегодня получил ошибку забыв про "передачу объектов по ссылке".
Я передал как new Object(myObject). В поисках более правильного решения погуглил и нашел интересную статью http://www.javable.com/columns/robinson/letters/01/ в ней как раз доказывается что в java
Потом залез на форум и нашел эту тему и окончательно запутался(LSD привык верить) и сегодня сильно не выспался чтоб полностью понять статью может посмотрите и всетаки дадите определенный ответ. Это сообщение отредактировал(а) Fedrus - 24.1.2008, 11:16 --------------------
Если вы идете через ад, идите не останавливаясь. |
|||
|
||||
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
По сути тут утверждается одно и то же. Для примитивных типов в стеке создаётся копия этой переменной. Для объекта - создаётся копия ссылки на этот объект.
Как это назвать, передачей копии ссылки, или передачей по значению, при условии что для объектных переменных значением является ссылка, вопрос вторичный. Просто классическая передача объекта по значению, подразумевает что создаётся копия этого объекта и именно она и передаётся. Поэтому я предпочитаю говорить, что передаётся копия ссылки. -------------------- 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. |
|||
|
||||
Мурлыкатам_ |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 265 Регистрация: 5.2.2007 Где: город-герой Минск Репутация: нет Всего: 2 |
Простите, что я продолжаю тему, я честно гуглил и честно смотрел статьи на форуме, но так и не понял как передать по ссылке к примеру массив целых чисел.
Задача: отсортировать массив случайных чисел от 0 до 5000, записанных в файл размером 1 мб, т.е. в файле 1 мб этих чисел. Решение (сразу сделал под .net): решаю задачу через алгоритм быстрой сортировки (QuickSort: http://ru.wikipedia.org/wiki/Quicksort#Java.2FC.23), получается быстро, но не достаточно. Передаю массив через ref, и о чудо, все сортируется меньше чем за секунду... Проблема: задача была поставлена для java, реализую все на java и сталкиваюсь с невозможностью передать массив по ссылке, в результате сортировка 100кб массива - 53 секунды. Очевидно проблема в постоянной передачи массива по значению. Верно ли я понял, что для решения этой задачи мне нужно просто массив завернуть в класс, сделать экземпляр этого класса и вместо массива передавать экземпляр класса для увеличения производительности? Если нет, то подскажите плз что-нить, потому что уже - ![]() |
|||
|
||||
powerOn |
|
|||
![]() software saboteur ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4367 Регистрация: 7.10.2005 Репутация: 47 Всего: 159 |
вообще-то, массивы в java всегда передаются по ссылке...
![]() |
|||
|
||||
Мурлыкатам_ |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 265 Регистрация: 5.2.2007 Где: город-герой Минск Репутация: нет Всего: 2 |
Хммм... завтра выкину код.
![]() ![]() |
|||
|
||||
Дрон |
|
|||
![]() Java-ненавистник :) ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3179 Регистрация: 29.12.2002 Где: Санкт-Петербург Репутация: 6 Всего: 92 |
Ровно как и в .NET Поэтому сказанное ниже очень странно:
Так что ждём код ![]() -------------------- Да. Именно так. |
|||
|
||||
SoulKeeper |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 375 Регистрация: 14.1.2007 Где: Ukraine, Lviv. Репутация: 11 Всего: 15 |
По алгоритму с Википедии вываливается StackOverflowError на 100кб массиве.
P.S. 100кб массив (1024 * 1024 / 4) элементов? Это сообщение отредактировал(а) SoulKeeper - 11.11.2008, 10:53 |
|||
|
||||
LSD |
|
||||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Как тебе это удалось?
-------------------- 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. |
||||
|
|||||
Мурлыкатам_ |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 265 Регистрация: 5.2.2007 Где: город-герой Минск Репутация: нет Всего: 2 |
Точно ![]() Все таки хромала реализация ![]() Я еще чуток поковыряюсь сам, а если не получиться, то напишу, стыдно немного кривоватый код показывать ![]() Хотя словом, "немного" я наверное себе зальстил ![]() Реализация уважаемого LSD, работает просто выше всяких похвал. Спасибо! Это сообщение отредактировал(а) Мурлыкатам_ - 11.11.2008, 14:12 |
|||
|
||||
SoulKeeper |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 375 Регистрация: 14.1.2007 Где: Ukraine, Lviv. Репутация: 11 Всего: 15 |
Хмм... таки не вываливается. Может что-то умудрился поломать пока копипейстил ![]() EDIT:
тут если 8 поменять на 32, то вывалиться ;) Это сообщение отредактировал(а) SoulKeeper - 11.11.2008, 13:55 |
||||
|
|||||
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Дык вываливается с OutOfMemoryError, а не StackOverflowError. Что вполне законно, т.к. массив занимает 128 мегабайт памяти, а по умолчанию JVM берет себе 32 мегабайта. Надо просто запустить с ключём -Xmx140m и все заработает. OutOfMemoryError это простая нехватка памяти, решается ключами запуска. А вот StackOverflowError уже более серьезная проблема, как правило это бесконечная или слишком "глубокая" рекурсия. -------------------- 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. |
|||
|
||||
SoulKeeper |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 375 Регистрация: 14.1.2007 Где: Ukraine, Lviv. Репутация: 11 Всего: 15 |
Отличить нехватку памяти от переполнения стэка я еше могу. Это сообщение отредактировал(а) SoulKeeper - 11.11.2008, 16:35 |
||||
|
|||||
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Вот в чем проблема. Надо доработать метод partition(). -------------------- 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. |
|||
|
||||
SoulKeeper |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 375 Регистрация: 14.1.2007 Где: Ukraine, Lviv. Репутация: 11 Всего: 15 |
Честно говоря я вообще не понимаю зачем использовать данный велосипед. Arrays.sort() работает и быстрее и вылеты оверфловы за ним не замечались ;)
|
|||
|
||||
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Ну я считаю, что знать базовые алгоритмы полезно и нужно. Тем более что Arrays.sort() сам использует quicksort, хотя там конечно реализация более грамотная с защитой от подобных проблем.
-------------------- 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. |
|||
|
||||
SoulKeeper |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 375 Регистрация: 14.1.2007 Где: Ukraine, Lviv. Репутация: 11 Всего: 15 |
Что-то не верится что на этом форуме наберется десяток программистов которые смогут написать по памяти хоть пару из
этих алгоритмов Одно дело знать что они существуют, другое - их писать. |
|||
|
||||
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Пузырек и сортировку слиянием думаю напишут многие
![]() А вообще это все оффтопик. -------------------- 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. |
|||
|
||||
Мурлыкатам_ |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 265 Регистрация: 5.2.2007 Где: город-герой Минск Репутация: нет Всего: 2 |
Я думаю каждый программист использует сортировку в своей жизни
![]() Поэтому зная алгоритм и его реализацию, лучше один раз написать сортировку самому и понять, как она работает, чем использовать кота в мешке =))) или каждый раз искать алгоритм в инете.
Мне тоже не вериться, потому что их число будет значительно больше ![]() Да и в любом случае понимание алгоритма лучше, чем бездумное использование готового! |
|||
|
||||
kashka |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 117 Регистрация: 29.11.2004 Где: Wolfenbuettel, Ge rmany Репутация: 1 Всего: 1 |
Теперь мне по крайней мере понятно почему у меня не работает след. (транспонирование двухмерногоа массива)
Так как передаётся не сама ссылка а её копия, хм...Так это что же получается нет никакой другой возможности кроме как return добавлять? |
|||
|
||||
kashka |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 117 Регистрация: 29.11.2004 Где: Wolfenbuettel, Ge rmany Репутация: 1 Всего: 1 |
Что то я торможу, второй массив мне и не нужен вовсе:
Но работает это конечно только для nxn массивов. |
|||
|
||||
goodday1941 |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 709 Регистрация: 16.7.2006 Где: Украина, Киев Репутация: 1 Всего: 9 |
как насчет варианта с враппером?
.. ну и метод транспонирования будет получать на вход объект класса ArrayWrapper
Это сообщение отредактировал(а) goodday1941 - 17.4.2009, 17:57 -------------------- SCJP 6 |
||||||
|
|||||||
math64 |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 8 Всего: 72 |
Если лень создавать враппер, сойдёт и массив из одного элемента:
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "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. |