Модераторы: LSD, AntonSaburov

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Массив указателей на объект. Как создать массив указателей на объект. 
:(
    Опции темы
Tamerlann
Дата 18.2.2005, 18:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 183
Регистрация: 10.11.2002
Где: Минск, Беларусь

Репутация: 2
Всего: 2



Цитата

Нет в java указателей


Как это нет? А что же тогда хранится в массиве:

Код

Object[] objs;


Другое дело, что с этими адресами ничего сделать нельзя, кроме как получить доступ к объекту по этому адресу. (т.е. нельзя произвольно поменять адрес и т.д.)

Цитата

на адрес памяти, где хранится адрес памяти, где хранится объект


Не понял? А подробнее можно, пожалуйста? Зачем?!

Это сообщение отредактировал(а) Tamerlann - 18.2.2005, 18:30
--------------------
http://timursdev.blogspot.com/ 
PM MAIL WWW Skype   Вверх
Domestic Cat
Дата 18.2.2005, 18:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 50
Всего: 172



Цитата(NotGonnaGetUs @ 18.2.2005, 08:45)
Кроме того, переменная сохраняет не только "адрес в памяти", но и фиксирует "тип" объекта.


Глубокое замечание smile


Цитата(NotGonnaGetUs @ 18.2.2005, 08:45)
Нет в java указателей. Использовать этот термин, особенно в контексте языка С - совсем глупо.

Ссылок тоже, кстати, нет (в С++ смысле), потому все-таки я предпочитаю думать о них как о защищенных указателях.

NotGonnaGetUs , зарегистрируйся пожалуйста.


--------------------

PM   Вверх
NotGonnaGetUs
Дата 18.2.2005, 20:27 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Цитата(Tamerlann @ 18.2.2005, 18:28)

Как это нет? А что же тогда хранится в массиве:

Код

Object[] objs;



Переменные с типом Object и именами objs[0], objs[1]....


Цитата

Не понял? А подробнее можно, пожалуйста? Зачем?!


Что бы JVM могла дефрагментировать память по своему усмотрению и не тратила время на поиск всех переменных ссылающихся на данный объект для их модификации.
Это детали реализации SUN JVM, в других реализациях этого может не быть.

----

Говорить о сслыках, памяти и т.п. можно в рамках теории алгоритмов, которая не зависит от языков (в рамках модели выч.машины предложенной Кнутом).
В этих терминах доказывается, что массив это трукутра в которой доступ к элементу осуществляется за o(1), двусвязный список - o(n), сортированое дерево - o(lonN) и т.п.

Можно говорить в рамках конкретного языка - например С++ - выясняя как размещаются в памяти объекты, что бы потом можно было играться с арифметикой указателй. Но это уже совсем другое дело, к теории алгоритмов имеет отдалённое отношение.


Если связывать теорию алгоритмов и java, то достаточно постулировать, что доступ к значению перменной и элементу массива осуществялется за o(1). Всё. Далее термин указатель может использоваться по его истинному значению: "указывать на что-то", а не "быть адресом ячейки памяти".

Говоря, что в java есть указатели, но их обрезали, вы пытаетесь объяснить новое в терминах старого.
Так поступал Ломоносов, представляя молекулы шестерёнками и используя механику для проведения вычислений. Результаты могут быть верны, но далеко не всегда smile

Смысл слова "ссылка" в java ровно один: где-то существует САМ объект и перменные только указывают на него, не важно каким способом (адрес, уникальное ID, ссылка на клон объекта синхронизируемая с исходным объектом автоматически). Нет перменной, которая БЫЛА БЫ объектом.
Лезть в детали конкретной реализации и говорить - перменная = указатель - глупо. В другой реализации это будет не так, а язык останется языком.


  Вверх
NotGonnaGetUs
Дата 18.2.2005, 20:34 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Цитата(Domestic @ 18.2.2005, 18:30)
NotGonnaGetUs , зарегистрируйся пожалуйста.

Мне нравится красный цвет ника smile
  Вверх
Domestic Cat
Дата 18.2.2005, 20:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 50
Всего: 172



Цитата
The reference values (often just references) are pointers to these objects and a special null reference, which refers to no object. (JVM spec., 2.4.6)


pointer переводится как "указатель"


--------------------

PM   Вверх
Domestic Cat
Дата 18.2.2005, 20:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 50
Всего: 172



Еще раз: абсолютно все равно как реализованы поинтеры в Java, пусть хоть как указатели на указатели на указатели. Спецификация ничего об этом не говорит.
Есть 2 понятия - указатель (поинтер) и ссылка.
Ссылка (в С++, C#) позволяет передавать не копию указателя на объект, а сам указатель. Благодаря этому можно сделать в шарпе
Код

Employee e = new Employee("John Smith");
Change(ref e);
// теперь e - Erick Brown

public void Change (ref Employee e)
{
   e = new Employee("Erick Brown");
}


С поинтером такое не пройдет.
Поэтому понятие "ссылка" в Java несколько сбивает с толку. Поэтому я и понимаю под ссылкой "защищенный поинтер".


--------------------

PM   Вверх
Guest
Дата 18.2.2005, 21:39 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Цитата(Domestic @ 18.2.2005, 20:58)
Еще раз: абсолютно все равно как реализованы поинтеры в Java, пусть хоть как указатели на указатели на указатели. Спецификация ничего об этом не говорит.
Есть 2 понятия - указатель (поинтер) и ссылка.
Ссылка (в С++, C#) позволяет передавать не копию указателя на объект, а сам указатель. Благодаря этому можно сделать в шарпе
Код

Int32 i = new Int32(6);
Change(ref i);
// теперь i == 9

public void Change (ref Int32 i)
{
   i = new Int32(9);
}


С поинтером такое не пройдет.
Поэтому понятие "ссылка" в Java несколько сбивает с толку. Поэтому я и понимаю под ссылкой "защищенный поинтер".

Знания каждого человека обременены опытом.
Он накладывает на каждое слово дополнительный груз.
То, что ты написал развязывает противоречия вокруг значений связанных со словом ссылка и указатель в твоей голове.
Для другого человека это всё может показаться бредом :)
Наверное как и то, что написал я.

Спецификация java, по-существу, говорит что есть объект и есть переменные которые на него указывают.

Какими прелагательными это обзывать сслыка на объект, узкатель на объект - не имеет разницы. Главное понимать суть и не путать с адресом в памяти или чем-то там ещё &)

btw,
Код

Int32 i = new Int32(6);
Int32 j = i;
Change(ref i);
// теперь i == 9

j - тоже будет указывать на 9?
Если нет, то и разницы между ссылками в С++ и перменными java по сути нет. Просто в с++ есть доп. оператор ref :)
Надеюсь при вызове Change(i); i - не клонируется? :)





  Вверх
NotGonnaGetUs
Дата 18.2.2005, 21:41 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Цитата(Guest @ 18.2.2005, 21:39)

это я написал smile
  Вверх
Domestic Cat
Дата 18.2.2005, 22:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 50
Всего: 172



Если хочешь общаться - зарегистрируйся. Не хочешь - дело твое, но мне это кажется просто неуважением к собеседникам.
Я с анонимами общаться не хочу, работай они хоть с самой библиотеки мфти.


--------------------

PM   Вверх
Tamerlann
Дата 19.2.2005, 14:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 183
Регистрация: 10.11.2002
Где: Минск, Беларусь

Репутация: 2
Всего: 2



Цитата

Переменные с типом Object и именами objs[0], objs[1]....


Но эти самые переменные "указывают" или ещё никуда (null), или на объект.
В этом плане - указатель

А вообще:
Цитата

Какими прелагательными это обзывать сслыка на объект, узкатель на объект - не имеет разницы. Главное понимать суть


Это точно.
Все равно говорим об одном и том же. Кокое из названий мы бы не употребляли далее, все же разберемся о чем речь.

Это сообщение отредактировал(а) Tamerlann - 19.2.2005, 15:04
--------------------
http://timursdev.blogspot.com/ 
PM MAIL WWW Skype   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0541 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.