Autor Thema: Stringvergleich funzt nicht  (Gelesen 1125 mal)

Offline jor

  • Senior Mitglied
  • ****
  • Beiträge: 258
  • Geschlecht: Männlich
Stringvergleich funzt nicht
« am: 05.01.06 - 16:46:45 »
Hallo zusammen,

ich habe folgendes Prob: In einem Java-Agenten habe ich mir über eine DocumentCollection Doc's zur Auswertung herangezogen. Ich möchte z. B. abfragen, ob die Maske zutrifft, dazu nutze ich folgenden Code(Auszug)...
String form, firma, pid, testform, a, b;
String tp_form[] = new String[2];
Session session = getSession();
AgentContext agentContext = session.getAgentContext();
db = agentContext.getCurrentDatabase();
pid = (String) session.getEnvironmentString("PID");
ds = db.FTSearch(pid, 0);
      
tp_form[0] = "RichtigeMaske";
tp_form[1] = "AndereMaske";
         
         
para = new String[ds.getCount()];
doc = ds.getFirstDocument();
while (doc != null)
{
   form = doc.getItemValueString("Form");
   System.out.println("Doc-Maske: " + form);
   System.out.println("Vergl.-Maske: " + tp_form[0]);
   if ( form == tp_form[0])
   {
      System.out.println("richtige maske ermittelt");
      firma = doc.getItemValueString("Firma1");
      System.out.println("Aktuelle Firma: "+firma);
      para[0] = firma;
      
   }
}

Aber die Literale werden nicht ausgewertet, obwohl es an Hand der Doc's zu Treffern kommen muss! Was habe ich übersehen, ode rfalsch gemacht???  :-\
Danke schonmal für eure Hilfe!
Vereinfacht die Dinge, und ihr erleichtert euch das Leben. (Henry David Thoreau)

In diesem Sinne, viele Grüsse Volker (Jor)

Offline jor

  • Senior Mitglied
  • ****
  • Beiträge: 258
  • Geschlecht: Männlich
Re: Stringvergleich funzt nicht
« Antwort #1 am: 05.01.06 - 17:04:54 »
Oh, sorry, aber hat sich echt erledigt!  mea culpa  :-[

Danke fürs Lesen und der gewollten Unterstützung!
« Letzte Änderung: 05.01.06 - 17:18:58 von jor »
Vereinfacht die Dinge, und ihr erleichtert euch das Leben. (Henry David Thoreau)

In diesem Sinne, viele Grüsse Volker (Jor)

Offline flaite

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.966
    • mein del.icio.us
Re: Stringvergleich funzt nicht
« Antwort #2 am: 05.01.06 - 17:31:54 »
Stringvergleiche immer mit equals.
Absolut fundamental und genau dieses Problem weist auf eine ganze Reihe von tiefergreifenden Java-typischen (z.B. Object.hashcode(), object.equals(String other), oder object-identity vs. object-equality) Komplexitäten hin, die unbedingt verstanden werden sollten. Eine sehr gute Darstellung findet man in Joshua Bloch, Effective Java.
Nur wenig mehr als 200 Seiten, die allerdings nicht unbedingt leicht zu lesen sind.
Trotzdem absolut empfehlenswert. Wenn du das verstanden hat, machte dies zumindest bei Java1.2 Zeiten sicher 7% der Zertifizierungsfragen aus.

Da du schon die Lösung gefunden hast, hier eine Vertiefung der Frage ins nächste Level.
http://today.java.net/pub/a/today/2004/04/07/stringsSQ2.html
Die VM hat nämlich einen String-Pool, weshalb manchmal tatsächlich == funktioniert (beide String-Variablen referenzieren tatsächlich auf das gleiche Objekt, weil aus Pool). Manchmal ist das aber nicht so. In deinem Beispiel vermutlich, weil der zweite String aus dem Property eines Objekts gezogen wird.
Praxis: Bei Strings auf jeden Fall immer equals verwenden. 
Ich stimm nicht mit allen überein, aber mit vielen und sowieso unterhaltsam -> https://www.youtube.com/channel/UCr9qCdqXLm2SU0BIs6d_68Q

---

Aquí no se respeta ni la ley de la selva.
(Hier respektiert man nicht einmal das Gesetz des Dschungels)

Nicanor Parra, San Fabian, Región del Bio Bio, República de Chile

Offline jor

  • Senior Mitglied
  • ****
  • Beiträge: 258
  • Geschlecht: Männlich
Re: Stringvergleich funzt nicht
« Antwort #3 am: 06.01.06 - 10:51:33 »
Hi kennwort,

danke für deine ausführliche Beschreibung, so hat es sich zugetragen und ich habe es auch so gelöst, auf den Pool bin ich beim Testen rein gefallen.
Als ich den Quelltext gepostet hatte, habe ich den Fehler schon selbst gesehen gehabt (manch mal sieht man den Wald vor lauter Bäumen nicht  ;) ).
Da ich keine Löschberechtigung habe, sonst wäre der Eintrag schon weg, muss ich zu meinem
"Was habe ich denn da gemacht?" wohl stehen.  ::)
 
A nice weekend!
Vereinfacht die Dinge, und ihr erleichtert euch das Leben. (Henry David Thoreau)

In diesem Sinne, viele Grüsse Volker (Jor)

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz