Newsgroup: it.comp.java
Titolo: Confronto di stringhe in java

Ciao a tutti, sto usando NetBeans 5 per costruire una semplice applicazione 
mobile con il seguente pezzo di codice:
if (displayable == Form1) {
            if (command == ok) {
                // Insert pre-action code here
                getDisplay().setCurrent(get_Form2());
                // Insert post-action code here
                  String s1;
                  String s2;
                 String ns1;
                 String ns2;
               s1="0100 prima string";
               s2="0100 seconda string";
                ns1=s1.substring(0,4);
               ns2=s2.substring(0,4);
                 if (ns1==ns2)Form2.append( s2);
          //Perchè  ns1==ns2  non si verifica? In Form2 dovrebbe uscire la 
stringa s2 ma non esce perchè non si verifica l'uguaglianza ns1==ns2. Sapete 
come devo fare per fare questo confronto? Devo comunque dire che se assegno 
valori uguali tipo ns1="0100" ; ns2="0100"; :-) funziona... scusate la 
banalità..cioè come se il problema fosse il metodo substring.
Grazie in anticipo per la risposta ed un saluto a tutta la news...
            }
}
La fortuna di Java è l'indipendenza dalla piattaforma... 

 Ciao a tutti, sto usando NetBeans 5 per costruire una semplice applicazione 
il controllo di uguaglianza tra oggetti si fa con equals, non con ==,
quindi:
ns1.equals(ns2)
ovviamente gli oggetti devono essere Comparable come nel caso di String.

 writes:
l>                s1="0100 prima string"; s2="0100 seconda string";
l>                 ns1=s1.substring(0,4); ns2=s2.substring(0,4);
l>                  if (ns1==ns2)Form2.append( s2);
l> Perchè ns1==ns2 non si verifica? In Form2 dovrebbe uscire la
l> stringa s2 ma non esce perchè non si verifica l'uguaglianza
l> ns1==ns2. Sapete
l> come devo fare per fare questo confronto? 
Ma leggersi  il manuale di Java  no ? Lo dicono,  ridicono, ripetono e
straripetono quando introducono gli operatori di confronto.
Quando si c1onfrontano con == due variabili di tipo UnOggetto si testa
che i riferimenti nelle due variabili puntino allo stesso oggetto.
OVVIAMENTE  non si  verifica la  cosa  nel tuo  codice, perché  quando
chiami il metodo  substring() su una stringa *crei  una nuova stringa*
sullo heap  quindi ns1  ed ns2 conterranno  riferimenti a  due oggetti
diversi,  anche se  il loro  stato è  il medesimo  i due  oggetti sono
diversi.
Sempre la  documentazione dice che per  verificare se lo  stato di due
oggetti è il medesimo (nel caso di String, se gli oggetti contengono i
medesimi caratteri)  bisogna utilizzare il  metodo equals(), ereditato
da  Object,  di cui  una  classe  che  vuole permettere  un  confronto
"sensato"  basato   sullo  stato   degli  oggetti  (come   String)  fa
l'override.
-- 
 /\            ___
/___/\__|_|\_|__|___Gian Uberto Lauri_____________________
  //--\ | | \|  |   Integralista GNUslamico  
\/		    e allevatore di bug da competizione

           //Perchè  ns1==ns2  non si verifica?
Perchè il confronto semantico fra oggetti si fa con il metodo
equals().
L'operatore == confronta le reference che per istanze diverse sono
(ovviamente) diverse, anche se gli oggetti sono semanticamente uguali.

 straripetono quando introducono gli operatori di confronto.
Grazie mille per la risposta adesso tutto funziona perfettamente...
Quale manuale? Intendi la documentazione presente nella cartella docs?
Purtroppo non sono molto bravo con l'inglese e per imparare Java è una 
caratterisca predominante.
No inglese? No Java ;-).

> straripetono quando introducono gli operatori di confronto.
l> Grazie mille per la risposta adesso tutto funziona perfettamente...
l> Quale manuale? Intendi la documentazione presente nella cartella
l> docs?
Il libro di Gosling su Java o un qualsiasi altro documento, cartaceo o
PDF che insegni il linguaggio...
l> Purtroppo non sono molto bravo con l'inglese e per imparare Java è
l> una caratterisca predominante.  No inglese? No Java ;-).
Purtroppo  senza  inglese  l'informatica  è un  brutto  ambiente  dove
muoversi.
In ogni  caso dovrebbero esistere dei  libri in italiano su  Java e le
traduzioni dei libri della Sun.
Se Java è un hobby si può soprassedere, ma per lavoro... (idem tutte le
altre tecnologie informatiche).
