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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Можно ли передать String по ссылке 
:(
    Опции темы
y3u
Дата 24.8.2007, 08:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(nornad @  24.8.2007,  04:09 Найти цитируемый пост)
Только вот лично я предпочту сделать обёртку. Потому как рефлекшн пользовать не лучшая идея


вот как раз код к этому...


--------------------
В нашей стране настаивать на кореньях, черной смородине, лимонных корках - гораздо эффективнее, чем на правах
PM MAIL   Вверх
3,14
Дата 24.8.2007, 10:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1614
Регистрация: 18.6.2004
Где: Н. Новгород

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



Жесть, меня на сановском форуме все дружно уверяют, что абсолютно все объекты передаются по значению, а не по ссылке. smile 


--------------------
Может быть, это только мой бред,
Может быть, жизнь не так хороша,
Может быть, я не выйду на свет,
Но я летал, когда пела душа...
PM MAIL   Вверх
fixxer
Дата 24.8.2007, 10:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(3 @ 14,24.8.2007,  10:16)
Жесть, меня на сановском форуме все дружно уверяют, что абсолютно все объекты передаются по значению, а не по ссылке. smile

Да, это действительно так. В случае ссылочной переменной по значению передается ссылка (копируется во фрейм вызова), поэтому и ее нельзя изменить, чтобы изменения были видны во вне метода.


--------------------
user posted image
PM MAIL ICQ   Вверх
ekr
Дата 24.8.2007, 11:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


...и это пройдет...
**


Профиль
Группа: Участник
Сообщений: 359
Регистрация: 6.5.2007
Где: Moscow, RU

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



Цитата(3 @ 14, 24.8.2007,  10:16 Найти цитируемый пост)
Жесть, меня на сановском форуме все дружно уверяют, что абсолютно все объекты передаются по значению, а не по ссылке.

разница в контексте.

дело в том, что действительно, 
Цитата(fixxer @  24.8.2007,  10:38 Найти цитируемый пост)
абсолютно все объекты передаются по значению, а не по ссылке

это правда.

но когда речь заходит об объектных типах, то по значению передается объектная ссылка, так что получается, что формальный и фактический параметры смотрят на один объект.
поэтому можно из метода его менять.

получается, что технически по значению, а концептуально по ссылке.

во как загнул )


--------------------
и это пройдет....

http://ekrs.blogspot.com
PM WWW   Вверх
3,14
Дата 24.8.2007, 11:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1614
Регистрация: 18.6.2004
Где: Н. Новгород

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



Я как то првивык разделять объект и ссылку на объект. Всё таки это разные вещи.
Объект - это, как известно, экземпляр класса. А ссылка - это всего лишь ссылка smile


--------------------
Может быть, это только мой бред,
Может быть, жизнь не так хороша,
Может быть, я не выйду на свет,
Но я летал, когда пела душа...
PM MAIL   Вверх
nornad
Дата 24.8.2007, 13:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1079
Регистрация: 16.2.2007
Где: в Караганде

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



3,14, ну вот, а говорил, что знаешь и понимаешь. smile
В java все объектные переменные - действительно представлены ссылками. Сами ссылки передаются в методы в безопасном виде, что позволяет получить и изменить данные в объекте по ссылке, но не позволяет изменить саму ссылку.

P.S. Блин, на моей памяти уже раз так четвёртый тему мусолим...


--------------------
Три достоинства программиста: Леность, Нетерпение и Гордость
Ларри Уолл
PM MAIL WWW ICQ Skype MSN   Вверх
3,14
Дата 24.8.2007, 14:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1614
Регистрация: 18.6.2004
Где: Н. Новгород

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



nornad, это, знаешь ли, уже вопрос терминилогии. Считать ли пер-ую типа ссылка, передаваемую в метод, объектом. В Java различия между этимми понятиями не делается, но это только в Java.


--------------------
Может быть, это только мой бред,
Может быть, жизнь не так хороша,
Может быть, я не выйду на свет,
Но я летал, когда пела душа...
PM MAIL   Вверх
nornad
Дата 24.8.2007, 14:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1079
Регистрация: 16.2.2007
Где: в Караганде

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



3,14, вот-вот. Ты уже сам ответил на свой вопрос. smile
Если пишешь на Java, надо придерживаться её идеологии. По идеологии Java всё есть объект (ну, за исключением встроенных типов, конечно). Понятие ссылки в Java вообще отсутствует. И не надо его из С/С++ тянуть - там полного аналога для этого не существует.
Нужно просто понять и принять идеологию, а не пытаться притянуть её к другой идеологии, которую ты уже знаешь.


--------------------
Три достоинства программиста: Леность, Нетерпение и Гордость
Ларри Уолл
PM MAIL WWW ICQ Skype MSN   Вверх
3,14
Дата 24.8.2007, 15:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1614
Регистрация: 18.6.2004
Где: Н. Новгород

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



nornad,  я на Java пишу гораздо дольше, чем некогда писал на C++. Просто такая идеология куда как удобней когда нужно копатся, напрмер, с байт кодом.


--------------------
Может быть, это только мой бред,
Может быть, жизнь не так хороша,
Может быть, я не выйду на свет,
Но я летал, когда пела душа...
PM MAIL   Вверх
AntonSaburov
Дата 24.8.2007, 15:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

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



Чего-то тут много словов всяких smile

Да вернуть массив строк и всех делов

Вот для примера - разбиавем строку на массив строк - разделителем является символ двоеточия ":"
Код

public String[] parseMyOldValue(String s)
{
   String[] p = s.split(":");
   return p;
}


PM MAIL WWW ICQ   Вверх
nornad
Дата 24.8.2007, 22:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1079
Регистрация: 16.2.2007
Где: в Караганде

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



Цитата(AntonSaburov @  24.8.2007,  18:34 Найти цитируемый пост)
Чего-то тут много словов всяких 

Ниасилил? smile
А пример, кстати, хорош - коротко и ясно. Если хочется большего - меняем String на Object и радуемся резко возросшим возможностям.
Жаль только, что камраду такой вариант не нравится - не лаконичен, видите ли... Ну, кому что, как говорится.


--------------------
Три достоинства программиста: Леность, Нетерпение и Гордость
Ларри Уолл
PM MAIL WWW ICQ Skype MSN   Вверх
math64
Дата 26.8.2007, 01:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

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



Если не нравится возвращать массив, то проще этого не придумаешь:
Код

interface StringSetter {
   void set(String value);
}

public class Parser {
   private String string1;
   private String string2;
   StringSetter setter1 = new StringSetter() {
      void set(String value) { string1 = value; }
   }
   StringSetter setter2 = new StringSetter() {
      void set(String value) { string2 = value; }
   }

   public static void main(String[] args) {
      Parser parser = new Parser();
      parse(args[0], parser.setter1, parser.setter2);
   }

   static void parse(String s, StringSetter setter1, StringSetter setter2) {
      int index = s.indexOf(',');
      if (index < 0) {
        setter1.set(s);
        setter2.set(null);
      } else {
        setter1.set(s.substring(0,index));
        setter2.set(s.substring(index));
      }
   }
};


PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

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

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


 




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


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

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