Ottimo punto, Marco. E' uno dei casi in cui la ricerca di efficienza
ha portato a un comportamento non uniforme del linguaggio (cosa che a
me pare piuttosto deprecabile). Infatti il seguente codice non ritorna
pippo - pluto - pluto come sarebbe lecito aspettarsi, ma pippo -
pluto - pippo.
public class NewClass {
public static void main(String a[]){
new NewClass();
}
NewClass() {
String s="pippo";
f(s);
System.out.println(s);
}
void f(String k){
System.out.println(k);
k="pluto";
System.out.println(k);
}
}
In questo senso String (ma anche i vari wrapper, come ti dici), pur
essendo un Object, si comporta come una variabile primitiva.
Ciao
Marco R.
Il 14 dicembre 2009 17.55, Marco Moser <
ma...@marcomoser.it> ha scritto:
> occhio che String, Integer, Float ... sono oggetti immutabili: vengono
> passati by ref ma non si possono modificare
>
> my 2 cents
>
>
>
> Il 12/12/2009 8.59, Marco Ronchetti ha scritto:
>> Le variabili primitive (int, double...) vengono passate per copia (by
>> value), gli oggetti per riferimento (viene passato per copia il
>> riferimento, ovvero puntatore).
>>
>> vedi
http://java.sun.com/docs/books/tutorial/java/javaOO/arguments.html
>>
>> Per completezza, aggiungiamo che però usando oggetti distribuiti (RMI)
>> anche gli oggetti stessi vengono copiati (e quindi devono essere
>> serializzabili) a meno che non siano essi stessi degli oggetti remoti,
>> nel qual caso viene passata una remote reference.
>>
>> Ciao
>>
>> Marco
>>
>> Il 12 dicembre 2009 08.45, Walter Collazzo<
walte...@inwind.it> ha scritto:
>>
>>> Molti di voi ricorderanno il VB.
>>> In quel linguaggio di poteva passare una variabile alla procedura byref e
>>> byvalue con sinificato intuitivo di per riferimento (puntatore) o per copia.
>>>
>>>
>>> In Java non esistono puntatori espliciti, ma internamente sì.
>>>
>>> Qualcuno sa (credo tutti, ma non è scontato) come viene passata in java una