|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Sep 2001
Città: de_legato
Messaggi: 792
|
[JAVA]nullpointerexception
Codice:
Integer p = null;
prova(p);
System.out.println(p.intValue());
public void prova(Integer i) {
i = new Integer(5);
}
__________________
---------------------------------------------- File reality.sys corrupted, Reboot Universe? Y/N ---------------------------------------------- |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Hai creato un nuovo oggetto Integer e ne hai assegnato il riferimento alla variabile locale 'i', che conteneva una copia del valore di 'p'.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Sep 2001
Città: de_legato
Messaggi: 792
|
e come faccio allora a simulare un passaggio per riferimento?
__________________
---------------------------------------------- File reality.sys corrupted, Reboot Universe? Y/N ---------------------------------------------- |
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Non puoi passare un riferimento ad una variabile (di qualunque tipo). L'unica cosa che puoi fare è alterare lo stato di un oggetto, se ci sono dei metodi che lo consentono.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Sep 2001
Città: de_legato
Messaggi: 792
|
quindi java ha solo il passaggio per valore? ....da qualche parte avevo letto che la classe Integer permetteva di ottenre il passaggio per riferimento in modo da ovviare al passaggio per valore dei tipi primitivi (in questo caso l'int).....
__________________
---------------------------------------------- File reality.sys corrupted, Reboot Universe? Y/N ---------------------------------------------- |
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Sep 2001
Città: de_legato
Messaggi: 792
|
del lettore moolto probabilmente
__________________
---------------------------------------------- File reality.sys corrupted, Reboot Universe? Y/N ---------------------------------------------- |
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Jul 2002
Messaggi: 4334
|
Questo è tutto da dimostrare
__________________
|Java Base| |
|
|
|
|
|
#10 |
|
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
Per l'amor del cielo, non cominciamo un'altra discussione sui fantalinguaggi di programmazione
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me! |
|
|
|
|
|
#11 |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Non ho capito bene il senso di questa affermazione ...... Java ha solo il passaggio per valore e basta.
Nel metodo A hai una variabile di tipo 'int'. Puoi passare al metodo B un riferimento alla variabile in modo tale che il metodo B possa alterarne il valore?? No .. ecco la dimostrazione.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
#12 |
|
Senior Member
Iscritto dal: Jul 2002
Messaggi: 4334
|
Infatti i primitivi sono passati per valore
__________________
|Java Base| |
|
|
|
|
|
#13 |
|
Member
Iscritto dal: Mar 2002
Città: Milano
Messaggi: 141
|
Allora ragazzi,
una cosa sono i tipi primitivi ed una cosa gli oggetti. In ogni caso con gli oggetti si agisce tramite i riferimenti. Quindi l'istruzione Integer p = null dichiara un riferimento di tipo Integer che per ora non "punta" a nessun oggetto effettivo. Con la chiamata prova(p); si passa il riferimento per valore al metodo e non l'oggetto. Quindi inizializzando il riferimento all'interno del metodo "prova" l'oggetto non viene visto dal metodo chiamante. Nel caso invece di un'istruzione di questo tipo Integer p = new Integer(2); prova(p); si dichiara un riferimento di tipo Integer e lo si fa "puntare" (se mi sentisse il mio prof. mi ammazzerebbe) ad un oggetto effettivo. Quando si passa il riferimento (sempre per valore) al metodo "prova" si può agire sull'oggetto che è condiviso. Spero di essermi spiegato.
__________________
<SetiEmperor> |
|
|
|
|
|
#14 |
|
Senior Member
Iscritto dal: Jul 2002
Messaggi: 4334
|
Beh, questo è risaputo.
__________________
|Java Base| |
|
|
|
|
|
#15 |
|
Senior Member
Iscritto dal: May 2000
Messaggi: 1459
|
per fare quello ke dici tu dovresti passare un vettore di un elemento di Integer, ed allocare quindi l'elemento 0 nel metodo. Giusto per dire la mia sul passaggio di parametri, condivido in pieno quanto detto da hawke (pur non condividendone alcune espressioni C++ like
Codice:
int* p = NULL;
prova(p);
printf("%d",*p);
delete p;
...
void prova(int* p){
p=new int;
*p=5;
}
byez EDIT: ovviamente il vettore deve essere allocato all'esterno: int [] p=new int[1]; byez |
|
|
|
|
|
#16 |
|
Senior Member
Iscritto dal: Dec 2000
Città: bologna
Messaggi: 1309
|
|
|
|
|
|
|
#17 |
|
Senior Member
Iscritto dal: Jul 2002
Messaggi: 4334
|
Rileggi bene tu
__________________
|Java Base| |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 20:11.












|







