Newsgroup: it.comp.java
Titolo: Perchè strighe uguali vengono date per diverse?!?!?

Perchè il seguente programma, compilato con javac prova.java ed eseguito con
java prova, fornisce il seguente output? Vengono trovate diverse stringhe...
assolutamente identiche! Com faccio per farle riconoscere come tali a java?
Output di java prova:
Primo null true
Primo Primo true
Primo Primo true
Primo Primo true
Primo Primo true
Primo Primo true
Primo Primo true
Primo Primo true
Primo Primo true
Primo Primo true
(vengono date per differenti le stringhe... "Primo" e "Primo"!
Listato di prova.java
import java.util.StringTokenizer;
class separazione
 {
  private String parte1=new String();
  private String parte2=new String();
//costruttori
  public separazione(String ilnome)
   {
    parte1=ilnome;
    parte2="";
    StringTokenizer st1=new StringTokenizer(ilnome);
    if (st1.hasMoreTokens())
     {parte1 = st1.nextToken();}
      if (st1.hasMoreTokens())
       {parte2 = st1.nextToken();}
   }
  public String nome()
   {
    return(parte1);
   }
 }
class prova
 {
  public static void main(String[] args)
   {
    String nomeprecedente=null;
    for (int i=0; i<10;i++)
     {
      separazione separa=new separazione("Primo Secondo");
      String parte1=separa.nome();
      System.out.print(parte1+" "+nomeprecedente+" ");
      System.out.println(parte1 != nomeprecedente);
      nomeprecedente=parte1;
     }
   }
 }

import java.util.StringTokenizer;
Ma perchè "Primo" e "Primo" vengono sempre classificati come diversi????
System.out.println(parte1 != nomeprecedente); dà sempre valore vero!!!
Boh...
Qualcuno sa aiutarmi?
class prova
 {
  public static void main(String[] args)
   {
    String nomeprecedente=null;
    for (int i=0; i<10;i++)
     {
    StringTokenizer st1=new StringTokenizer("Primo Secondo");
    String parte1="Primo Secondo";
    if (st1.hasMoreTokens())
     {parte1 = st1.nextToken();}


Per confrontare sue stringhe devi usare
stringa1.equalsTo(stringa2)
che confronta, come immagino tu volgia, il contenuto delle stringhe.
L'operatore ==, al contrario, restituisce true se e solo se le stringhe sono
proprio le stesse, cioč lo stesso oggetto, e non due oggetti con unguale
contenuto...
Ciao
Giacomo

System.out.println(parte1 != nomeprecedente); dà sempre valore vero!!!
 boolean equals(Object anObject) 
          Compares this string to the specified object. 
class A
{
 public static void main(String[] args)
 { 
	 String a = "PRIMO";
	 String a_ref = a;
	 String b = "primo";
	 System.out.println("a == a_ref  "+(a == a_ref) );
	 System.out.println("a == b      "+(a == b.toUpperCase() ) );
	 System.out.println("a.equals(b) "+a.equals(b.toUpperCase() ) );
 }
}
//----------------------------------------------------------------
a == a_ref  true
a == b      false
a.equals(b) true
== confronta che le due istanze siano le stesse, se vuoi confontare
due stringhe usa il metodo equals
sbirish.

Marco wrote:

se usi == confronti i riferimenti agli oggetti, non il loro contenuto 
informativo. Studiarsi qualche manuale prima, fa schifo?

 Vengono trovate diverse stringhe...assolutamente identiche
Perche' in java due stringhe sono sempre diverse se confrontate con ==.
per vedere se due stringhe sono uguali devi usare
if (string1.equals(Striing2))...
per vedere se sono diverse devi usare
if (!string1.equals(Striing2))...
HTH
--
Gnomo
...any way the wind blows...

...

In java le stringhe sono considerate oggetti e non dati primitivi con
int o long utilizza i metodi string1.equals(string2) o
string1.equalsIgnoreCase(stringa2)  per ignorare maiuscole nimuscole

 
Ocio che 
String a = "PRIMO";
String b = "PRIMO";
dà per true  la a==b. Questo però non deve fuoriviare in quanto è
dovuto a delle ottimizzazioni della JVM sulle string literal: in
generale l'operatore == confronta sempre i puntat..ops i riferimenti
degli oggetti.
Haz