Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.11.11;
Скачать: CL | DM;

Вниз

Передать значение по ссылке в функцию в jave   Найти похожие ветки 

 
ERGef   (2007-10-02 23:06) [0]

Как это сделать? В delphi мы дописываем var, в с++ - &. А в jave как?


 
ferr ©   (2007-10-02 23:10) [1]

Этого сделать нельзя.


 
celades ©   (2007-10-02 23:10) [2]

Объекты там и так ссылки


 
tesseract ©   (2007-10-02 23:13) [3]

Сегодня конкурс на самый тупой вопрос ?  в PHP или Perl ничего по ссылке передать не нужно ? Откуда они в виртуальной машине ?


 
sdubaruhnul   (2007-10-02 23:18) [4]

Почитай про boxing / unboxing.


 
tesseract ©   (2007-10-02 23:22) [5]


> Почитай про boxing / unboxing.


Призрак memlink ? :-)


 
Юрий Зотов ©   (2007-10-02 23:29) [6]

> ERGef   (02.10.07 23:06)  

> А в jave как?

Передать объект. Например, не int, а Integer.

При этом, конечно, все равно идет передача копии, но передается копия ссылки на объект, а не копия объекта. Что позволяет менять его "начинку".


 
tesseract ©   (2007-10-02 23:39) [7]


>  но передается копия ссылки на объект, а не копия объекта.
>  Что позволяет менять его "начинку".


95 % программистов, не понимает указателей  (С) не помню кто.


 
ERGef   (2007-10-02 23:43) [8]


> Передать объект. Например, не int, а Integer.


Значит если передать массив, то "начинку" можно будет изменить. Ведь массив это объект. так?


 
ferr ©   (2007-10-02 23:48) [9]

> Сегодня конкурс на самый тупой вопрос ?  в PHP или Perl
> ничего по ссылке передать не нужно ? Откуда они в виртуальной
> машине ?

В c# это делается ключевыми словами ref, in, out. По-вашему там нет виртуальной машины?


 
ferr ©   (2007-10-02 23:49) [10]

> Значит если передать массив, то "начинку" можно будет изменить.
> Ведь массив это объект. так?

Да.


 
Плохиш ©   (2007-10-03 01:48) [11]


> ERGef   (02.10.07 23:06)  
> Как это сделать? В delphi мы дописываем var, в с++ - &.
> А в jave как?

Да, не царское это дело описание языка читать...

Это, думается, в первой же главе любой книжки описывается


 
tesseract ©   (2007-10-03 10:10) [12]


> В c# это делается ключевыми словами ref, in, out. По-вашему
> там нет виртуальной машины?


По моему там есть неуправляемый код + прекомпиляция. С# к тому же может и нативный код делать.


 
wicked ©   (2007-10-03 12:45) [13]

> tesseract ©   (02.10.07 23:13) [3]

> Сегодня конкурс на самый тупой вопрос ?  в PHP или Perl
> ничего по ссылке передать не нужно ? Откуда они в виртуальной
> машине ?

садись, два
и в перле, и в пхп можно передавать значения по ссылке


 
tesseract ©   (2007-10-03 13:00) [14]


> садись, дваи в перле, и в пхп можно передавать значения
> по ссылке


Ну не по "ссылке", а саму переменую для изменения. У меня диалектика другая.


 
wicked ©   (2007-10-03 13:04) [15]

> tesseract ©   (03.10.07 13:00) [14]

> > садись, дваи в перле, и в пхп можно передавать значения
> > по ссылке
> Ну не по "ссылке", а саму переменую для изменения. У меня
> диалектика другая.

можно, именно для изменения
специально только что проверил

так что это не диалектика.....


 
Игорь Шевченко ©   (2007-10-03 13:06) [16]


> 95 % программистов, не понимает указателей  (С) не помню
> кто.


Спольски


 
tesseract ©   (2007-10-03 13:13) [17]


> можно, именно для измененияспециально только что проверил


Получил блок памяти ?


 
wicked ©   (2007-10-03 13:40) [18]

> tesseract ©   (03.10.07 13:13) [17]

> > можно, именно для измененияспециально только что проверил
> Получил блок памяти ?

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


 
Alkid ©   (2007-10-03 13:59) [19]


> По моему там есть неуправляемый код + прекомпиляция. С#
> к тому же может и нативный код делать.

C# не умеет делать НАТИВНЫЙ код. Он умеет делать UNSAFE код, а это очень разные вещи.

C# предусматривает
а) Возможность передавать по ссылке (ключ. слова ref, out) значения.
б) В Unsafe коде работать с указателями. Правда нельзя там брать указатель на объект.

В Java нет прямого способа передать value-тип (встроеныне примитивные типы) по ссылке в функцию. Можно только через объект-обёртку. AFAIK boxing-unboxing в Java реализуется только путём упаковывания в обёртку "ручками" и распаковывания обратно. В C# это делается автоматически.


 
tesseract ©   (2007-10-03 14:06) [20]


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


Ты путаешь передачу ПЕРЕМЕННОЙ с передачей ссылки. По ссылке/указателю можно хоть слона передать.


 
tesseract ©   (2007-10-03 14:11) [21]


> C# не умеет делать НАТИВНЫЙ код. Он умеет делать UNSAFE
> код, а это очень разные вещи.


А ты чей C# имеешь в виду ?


 
Alkid ©   (2007-10-03 14:15) [22]


> Ты путаешь передачу ПЕРЕМЕННОЙ с передачей ссылки. По ссылке/указателю
> можно хоть слона передать.

Есть два способа передачи объекта как параметра:
1. Объект копируется в стек. Его копия становится локальным объектом для вызываемого кода и уничтожается по завершению его работы. Все изменения в копии остаются в ней, оригинал не меняется.
2. В стек копируется только адрес объекта (в любой форме). Это может называться ссылкой, указателем или как-то ещё, не важно. В данном случае локальным объектом является только то, что содержит адрес передаваемого объекта, через который идёт обращение к объекту оригиниалу. В известных мне языках программирования передача по ссылке и передача указателя отличаются только синтаксически и косметически.

В свете изложенного, прошу пояснить, что есть "передача переменной", если это не есть пункт 1 вышеизложенного.


 
Alkid ©   (2007-10-03 14:18) [23]


> А ты чей C# имеешь в виду ?

ECMA-шный :)


 
tesseract ©   (2007-10-03 14:24) [24]


> что есть "передача переменной", если это не есть пункт 1
> вышеизложенного.


const и var я имею в виду.
Если ты приравниваешь переменную к ссылке - ну пусть так и будет. Ссылка она на определённую область памяти. Например если элемент массива передан по ссылке - я могу достучаться и до других его элементов просто переместиившись взад/вперёд по памяти (адрес есть), а если я передам его как переменную -  надо будет предварительно выяснить её адрес - PHP такое позволит?.


 
Alkid ©   (2007-10-03 14:27) [25]


> const и var я имею в виду.
> Если ты приравниваешь переменную к ссылке - ну пусть так
> и будет. Ссылка она на определённую область памяти. Например
> если элемент массива передан по ссылке - я могу достучаться
> и до других его элементов просто переместиившись взад/вперёд
> по памяти (адрес есть), а если я передам его как переменную
> -  надо будет предварительно выяснить её адрес - PHP такое
> позволит?.

Не могу сказать, PHP в упор не знаю :) Я говорил про C++/C#/Dephi/Java.

Переменную к ссылке я не приравниваю. Ссылка - это адрес значения, переменная - это значение.


 
vpbar ©   (2007-10-03 14:33) [26]

А я вообще обычно различаю термины ссылка и указатель. Указатель - это нечто содержащее адрес памяти. Для указателя допустимы сложение и вычтаие. Считывание и запись байтов.
А ссылка - это объект, указывающий на определенные данные, но не хранящий их. Для ссылки допустима операция разыменования.

ЗЫ. Так вот ,насколько я помню, указателей в Java нет. Ибо тогда работа вртуальной машины очень усложняется.


 
Alkid ©   (2007-10-03 14:40) [27]


> А я вообще обычно различаю термины ссылка и указатель. Указатель
> - это нечто содержащее адрес памяти. Для указателя допустимы
> сложение и вычтаие. Считывание и запись байтов.
> А ссылка - это объект, указывающий на определенные данные,
>  но не хранящий их. Для ссылки допустима операция разыменования.
>
> ЗЫ. Так вот ,насколько я помню, указателей в Java нет. Ибо
> тогда работа вртуальной машины очень усложняется.

В джаве понятие ссылки - это не то, что понятие ссылки в C++, например.
В джаве (и в .NET) понятие ссылки это прямое обобщение понятия указателя, из которого выбрасывается арифметика и то, что он содержит адрес. Ссылка указывает на объект, а как - это деталь реализации. При это ссылку можно менять, т.е. заставлять её указывать на другие данные.

При этом, понятие ссылки в джаве/.NETе очень слабо относится к теме топика, ибо речь идёт только о передаче параметров в функции, где понятие "по ссылке" может не относиться к понятию "ссылка", применяемому в дргих частях программы. Т.е. ссылки вида:
var MyReference : TObject
и вида:
procedure MyProc(var X:integer)
Это немного разные по своей природе ссылки.


 
tesseract ©   (2007-10-03 14:56) [28]


> В джаве понятие ссылки - это не то, что понятие ссылки в
> C++, например.


Указатель не имеет счётчика ссылок, "ссылка" имеет. Вот для меня разница.

Это я в [14] уже говорил.


> В джаве понятие ссылки - это не то, что понятие ссылки в
> C++, например.


Ну? у нас тут вроде DelphiMaster ?


 
euru ©   (2007-10-03 14:56) [29]


> tesseract ©   (03.10.07 14:24) [24]
> const и var я имею в виду.
В Java аналогом const является final.


 
euru ©   (2007-10-03 15:00) [30]


> tesseract ©   (03.10.07 14:56) [28]
> Указатель не имеет счётчика ссылок, "ссылка" имеет.
С какого перепуга?


 
tesseract ©   (2007-10-03 15:01) [31]


> С какого перепуга?


Что именно ?


 
Alkid ©   (2007-10-03 15:01) [32]


> Указатель не имеет счётчика ссылок, "ссылка" имеет. Вот
> для меня разница.

Простите, а где ссылка имеет счётчик ссылок? :)

Я не знаю, как там в PHP, но в Delphi, .NET и Java не применяются механизмы подсчёта ссылок в ссылках. В дельфи они применяются только в случае ссылок на интерфейсы, да и то, счётсик ссылок распологается внутри COM-объектов, а не в ссылках.


 
tesseract ©   (2007-10-03 15:03) [33]


> Простите, а где ссылка имеет счётчик ссылок? :)


Гм, лан перегруз, тут согласен. Пересидел как-раз с COM- объектами :-)


 
Alkid ©   (2007-10-03 15:08) [34]


> м, лан перегруз, тут согласен. Пересидел как-раз с COM-
> объектами :-)

Сочувствую. Помниццо один раз пересидел с COM-ом. Он мне уже ночами снился. Так вот, обсуждали с одногрупниками какого-то мерзкого препода, и я на полном серьёзе выдал: "а давайте все хором про него забудем и он исчезнет"!
Психушки избежал лишь чудом :)


 
vpbar ©   (2007-10-03 15:11) [35]

Alkid ©   (03.10.07 15:08) [34]
А что смешного. Если о чем-то или ком-то все забадут, то он действительно исчезнет.


 
tesseract ©   (2007-10-03 15:16) [36]


> Сочувствую. Помниццо один раз пересидел с COM-ом.


У меня как раз COM+1С основная кормёжка считай.  А delphi ну не всегда ведёт себя, как нужно 1С.


 
Alkid ©   (2007-10-03 16:13) [37]


> А что смешного. Если о чем-то или ком-то все забадут, то
> он действительно исчезнет.

Мсье соллипсист?


 
vpbar ©   (2007-10-03 16:28) [38]

Alkid ©   (03.10.07 16:13) [37]
солипсист=законченный субъективный идеалист ?
Тогда: местами. В смысле не совсем законченный.


 
sdubaruhnul   (2007-10-03 19:37) [39]

Щас будет второй Ruby On Rails, выпущенный в 1987 году и ставший прородителем всех дизайнеров форм.


 
tesseract ©   (2007-10-03 21:57) [40]


> Щас будет второй Ruby On Rails, выпущенный в 1987 году и
> ставший прородителем всех дизайнеров форм.


Ну да, давайте ещё Xerox Lab вспомним.



Страницы: 1 2 вся ветка

Текущий архив: 2007.11.11;
Скачать: CL | DM;

Наверх




Память: 0.57 MB
Время: 0.025 c
2-1192797770
Neo
2007-10-19 16:42
2007.11.11
поиск топ100


1-1188202326
member
2007-08-27 12:12
2007.11.11
Действия в расшаренном ресурсе


2-1192442287
Footballer
2007-10-15 13:58
2007.11.11
Блокировка нажатия клавиш


1-1187791574
yahaha
2007-08-22 18:06
2007.11.11
Странности в TreeView


2-1192456984
unknowing
2007-10-15 18:03
2007.11.11
WM_Hscroll и Memo