PDA

Bekijk Volledige Versie : Java, pointers, references, argument passing



Rene Pijlman
15/01/05, 01:05
Michiel de Roo:
>Rene Pijlman:
>> Michiel de Roo:
>>>Niet expliciet, maar een object gedraagt zich in Java eerder als een
>>>pointer dan als een reference.

Ik zou niet weten waarom. Een verwijzing naar een object heet in Java een
reference, en zo gedraagt het zich ook. Vrije pointers zijn er niet in
Java.

>Ik ben toch niet enige die dit denkt:
>http://javadude.com/articles/passbyvalue.htm
>
>en dan vooral:
>To sum up: Java has pointers, and the value of the pointer is passed in.
>There's no way to actually pass an object itself as a parameter. You can
>only pass a pointer to an object.

Dat wordt dus meestal een reference genoemd, in plaats van een pointer. De
verwarring, is dat in Java een reference by value wordt gepassed, in
plaats van een object by reference.

Hij heeft het goed begrepen: "A correct statement would be Object
references are passed by value".

Maar hier gaat hij de fout in: "The use of the word 'reference' in Java
was an incredibly poor choice (in my not-so-humble opinion...) Java has
pointers, plain and simple." Je kunt namelijk niet zeggen dat een defintie
fout is, omdat hij strijdig is met je eigen opvattingen. Redeneringen en
conclusies kunnen fout zijn, opvattingen kunnen fout worden gevonden, maar
definities zijn gewoon; goed noch fout.

"However, it makes no difference how pointers are implemented under the
covers." Dat is waar, maar "You program with them exactly the same way in
Java as you would in C or C++" is apekool. Wat er in C allemaal met
pointers gebeurt is met geen pen te beschrijven. Gelukkig doet Java dat
een stuk netter.

Ik zeg: Java heeft geen pointers, maar references. Argument passing is
altijd by value. In plaats van een object, wordt een reference by value
gepassed.

--
René Pijlman

Wat wil jij leren? http://www.leren.nl

Michiel de Roo
15/01/05, 12:05
Rene Pijlman wrote:
> Michiel de Roo:
>
>>Rene Pijlman:
>>
>>>Michiel de Roo:
>>>
>>>>Niet expliciet, maar een object gedraagt zich in Java eerder als een
>>>>pointer dan als een reference.
>
>
> Ik zou niet weten waarom. Een verwijzing naar een object heet in Java een
> reference, en zo gedraagt het zich ook.

De reden dat je in Java een 'null pointer exception' hebt is
waarschijnlijk omdat het onderscheid zeer duidelijk is. Maar goed, of je
het een reference of pointer noemt is mij om het even.

John Bokma
15/01/05, 19:35
Michiel de Roo wrote:

> Rene Pijlman wrote:
>> Michiel de Roo:
>>
>>>Rene Pijlman:
>>>
>>>>Michiel de Roo:
>>>>
>>>>>Niet expliciet, maar een object gedraagt zich in Java eerder als
>>>>>een pointer dan als een reference.
>>
>> Ik zou niet weten waarom. Een verwijzing naar een object heet in Java
>> een reference, en zo gedraagt het zich ook.
>
> De reden dat je in Java een 'null pointer exception' hebt is
> waarschijnlijk omdat het onderscheid zeer duidelijk is. Maar goed, of
> je het een reference of pointer noemt is mij om het even.

Voor Java:

Een reference is een pointer die of naar een object verwijst, of naar null.

Dus references zijn een subset van pointers aangezien een pointer in C/C++
naar een willekeurig geheugenadres kan verwijzen (dus b.v. ergens in het
"midden" van een object).

--
John Voorbeeldscripts in Perl: http://johnbokma.com/perl/
Website design: http://johnbokma.com/websitedesign/
Ervaren Perl / Java programmeur beschikbaar: http://castleamber.com/
Tevreden opdrachtgevers: http://castleamber.com/testimonials.html