Repository 32bit  Forum
Repository 64bit  Wiki

[java] NullPointerException ?

Forum dedicato alla programmazione.

Moderatore: Staff

Regole del forum
1) Citare in modo preciso il linguaggio di programmazione usato.
2) Se possibile portare un esempio del risultato atteso.
3) Leggere attentamente le risposte ricevute.
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.

Re: [java] NullPointerException ?

Messaggioda raffaele181188 » mar dic 09, 2008 14:41

aha... grazie della delucidazione...

Enrico, per quanto riguarda l'altra cosa forse hai ragione, è meglio usare equals() per una questione di coerenza, anche se viene più naturale
Codice: Seleziona tutto
if ( saluto == "goodbye") { /**/ }

che non
Codice: Seleziona tutto
if (saluto.equals("goodbye") ) { /* ...  */ }

... Pensandoci su non riesco a ricordare qual'è il sistema che uso io... E' che ultimamente scrivo in php e javascript e quindi...

In ogni caso, per quanto detto, non c'è nessun problema se si usa == al posti di equals() nel confronto tra String, quindi anche il codice di marcelloma è corretto
Avatar utente
raffaele181188
Packager
Packager
 
Messaggi: 789
Iscritto il: ven set 07, 2007 20:40
Località: DearSkin (FG)
Nome Cognome: Raffaele
Slackware: current
Kernel: 2.6.29.6
Desktop: KDE 4.3
Distribuzione: Ubuntu

Re: [java] NullPointerException ?

Messaggioda targzeta » mar dic 09, 2008 14:44

raffaele181188 ha scritto:@spina non voglio affatto che taci, ci mancherebbe...
Innanzitutto premetto che sono daccordo che neongen sulla leggibilità e il metodo .equals(), ma ancora una volta sono opinioni, se i due metodi fossero davvero uguali, allora per quanto mi riguarda la leggibilità è una questione soggettiva, e in quanto tale, non discutibile. Però neongen ci ha fatto notare come i due metodi non sono uguali (magari citaci la fonte neongen).

Per il resto, anche qui è questione di gusti, tu fai esempi di milioni di oggetti di tipo persone. Come ho scritto in un post precedente, tu allochi sempre e comunque milioni di oggetti anche se ne devi usare solo 1. Io invece faccio un casino di test anche se si usano tutte le entry dell'array.

Vuoi sapere come farei io? Innanzitutto sposterei tutti i metodi set nella classe Persona, perchè sono metodi di Persona e non di Rubrica! In questo modo si può settare un nome solo di un oggetto Persona precedentemente allocato. Poi creo la classe Rubrica che usa Persona, e non come array (dato che la funzione principale di una rubrica è fondamentalmente la ricerca, e come sappiamo l'array non si presta bene a questo scopo). Qui, nell'unico metodo che inserisce una persona nella rubrica sceglierei di non fare controlli, ma di dare come prerequisito del metodo il fatto che l'oggetto Persona che si vuole inserire debba essere stato preallocato. Sta a chi usa Rubrica usarla bene!

Infine, se si vuole fare una cosa fatta bene, allora bisognerebbe utilizzare davvero il paradigma ad oggetti e creare interfacce in modo da:
  • essere indipendenti dal tipo di oggetto inserito in Rubrica
  • essere indipendenti dall'implementazione della rubrica stessa, ovvero dare la possibilità di avere una rubrica con array, una con alberi, una con liste....
La base della programmazione è il riuso, basta pensare in questo modo e il progetto esce sempre carino! Però forse ci vuole un pò troppo tempo per pensare :).

Spina
Linux Registered User #454438
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama
20/04/2013 - Io volevo Rodotà
Avatar utente
targzeta
Iper Master
Iper Master
 
Messaggi: 6168
Iscritto il: gio nov 03, 2005 14:05
Località: Carpignano Sal. (LE) <-> Pisa
Nome Cognome: Emanuele Tomasi
Slackware: current
Kernel: latest stable
Desktop: IceWM

Re: [java] NullPointerException ?

Messaggioda neongen » mar dic 09, 2008 15:05

Avatar utente
neongen
Packager
Packager
 
Messaggi: 825
Iscritto il: ven mag 25, 2007 11:37
Nome Cognome: Enrico
Slackware: 14.0_64
Kernel: 3.4.4
Desktop: KDE 4.5.5
Distribuzione: Maemo 5

Re: [java] NullPointerException ?

Messaggioda raffaele181188 » mar dic 09, 2008 15:14

Ok spina, direi che l'ultimo post è perfetto. E' che la classe di marcelloma è studiata male, si vedeva dall'inizio; anche io avrei fatto esattamente quello che hai scritto tu, ed in quel modo non c'è nè spreco di ram per inutili oggetti allocati, nè spreco di tempo cpu per controlli superflui. E poi si avrebbe una rubrica che funge...
Scusa se torno un'altra volta sull'altro argomento, ma mi sa che ancora non mi sono spiegato. E' che si tratta di una curiosità che vale la pena di conoscere.
equals() e == fanno due cose diversissime (lo dicono tutte le fonti, non c'è bisogno che neongen ce ne linki una) solo che, nel caso delle stringhe, una "furbata" della JVM permette di
  • Far restituire LO STESSO RISULTATO a entrambi. Nota che il comportamento interno è diverso, è solo il RISULTATO ad essere identico
  • Risparmiare spazio in memoria
Ho postato un esempio prima, sui miei computer funziona... Non l'ho ancora trovato, ma mi pare di aver letto questa cosa nel libro di bruce eckel
Avatar utente
raffaele181188
Packager
Packager
 
Messaggi: 789
Iscritto il: ven set 07, 2007 20:40
Località: DearSkin (FG)
Nome Cognome: Raffaele
Slackware: current
Kernel: 2.6.29.6
Desktop: KDE 4.3
Distribuzione: Ubuntu

Re: [java] NullPointerException ?

Messaggioda targzeta » mar dic 09, 2008 15:59

raffaele181188, se guardi i link postati da neongen (di cui lo ringrazio), trovarai questo:
http://java.sun.com/docs/books/jls/thir ... ml#15.21.3
da cui ha estratto il frammento che ci ha dato al suo primo post. A questo punto non penso che ci siano dubbi vero? Se non ho capito male, nell'ultimo paragrafo (quello postato da neongen) dice che l'operatore '==' potrebbe tornare 'false' anche se le stringhe in effetti sono uguali ma non riferiscono allo stesso oggetto. Quindi ciò dovrebbe smentire anche la tua tesi.

Spina

P.S. sempre nello stesso link trovi questo:
http://java.sun.com/docs/books/jls/thir ... tml#101083
guarda l'esempio e ti renderai conto di quando l'operatore '==' differisce dal metodo .equals() sulle stringhe. In pratica il tuo discorso iniziale è corretto, solo che se la stringa è generata a runtime, ad esempio come concatenazione di due stringhe, allora l'operatore '==' ritorna false, mentre il metodo .equals() ritorna true. L'esempio è questo:
Codice: Seleziona tutto
casa='casa';
sa='sa';
casa == ("ca"+sa) => false
casa.equals("ca"+sa) => true

Ora spero che sia tutto chiaro come lo è per me ;)
Linux Registered User #454438
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama
20/04/2013 - Io volevo Rodotà
Avatar utente
targzeta
Iper Master
Iper Master
 
Messaggi: 6168
Iscritto il: gio nov 03, 2005 14:05
Località: Carpignano Sal. (LE) <-> Pisa
Nome Cognome: Emanuele Tomasi
Slackware: current
Kernel: latest stable
Desktop: IceWM

Re: [java] NullPointerException ?

Messaggioda raffaele181188 » mar dic 09, 2008 16:18

@spina Sì ora è tutto chiaro. Grazie dell'esempio
Avatar utente
raffaele181188
Packager
Packager
 
Messaggi: 789
Iscritto il: ven set 07, 2007 20:40
Località: DearSkin (FG)
Nome Cognome: Raffaele
Slackware: current
Kernel: 2.6.29.6
Desktop: KDE 4.3
Distribuzione: Ubuntu

Precedente

Torna a Programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite