# Konsolenparameter übergeben über den Reiter "arguments"



## knuffi88 (17. Nov 2011)

Hi zusammen,

habe gerade dieses Java-Forum entdeckt und ich hoffe ihr könnt mir helfen.
Ich verzweifle gerade an einer Sache bei Eclipse.
Muss dazu sagen, dass ich noch ziemliche Anfängerin bin.

Ich habe von einer Seite ein kleines Programm heruntergeladen:
http://ccwi.cs.hm.edu/toolwiki/images/4/46/EclipseTutorialAdressManager_src.zip

Dabei geht es um ein Adressbuch. Um einen Adressbucheintrag ausgeben zu lassen, muss ich das Programm mit einem Parameter starten, und zwar dem namen.
Ich habe ein Objekt namens sandra angelegt, aber wenn ich über Run->Run Configurations->Arguments sandra übergebe, bekomme ich die Meldung in der Konsole, dass er keinen Eintrag findet.
Jetzt aber das ulkige. Ich habe in der Main-Methode einfach mal die Zeile
args[0] = "sandra"; geschrieben. Und siehe da, er gibt die Adressdaten aus.

Jetzt frage ich mich, wieso das nicht über den Argumentsreiter geht. Habe zum Testen eine einfache Main-Methode mit der Ausgabe von args[0] über print erstellt und bei dieser einfachen Aufgabe funktioniert es über den Arguments-Reiter. Könnt ihr mir da weiterhelfen?

Er gibt ja in der Konsole aus, dass er nach dem namen sandra sucht.
Aber er findet nichts. :bahnhof:

Das sind so kleine Sachen, wo ich mir den Kopf zerbreche, weils mich sehr interessiert, wieso das nicht klappt.

Viele Grüße und schon einmal Danke!

Eure Sandra


----------



## SlaterB (18. Nov 2011)

wie sieht es denn nun ganz konkret aus,
du sagst mehr oder weniger dass '"sandra" als Parameter ankommt, aber nicht funktioniert, 
obwohl "sandra" direkt im Quellcode eingegeben funktioniert?
das ist ja schwer zu glauben,

hast du schon Tests der folgenden Form durchgeführt?

```
main {
  String a = .. parameter;
  String b = "sandra";
  System.out.println(a ist .. b ist .., a.equals b? = ..);

  Programmdurchlauf-Methode mit a aufrufen, Ergebnis ausgeben
  Programmdurchlauf-Methode mit b aufrufen, Ergebnis ausgeben
}
```
kommt da wirklich raus dass beide Strings gleich sind, equals true ergibt und der eine Aufruf funktioniert, der andere nicht??


----------



## knuffi88 (18. Nov 2011)

Hi SlaterB,

ich habe nun dies getestet:
String a = args[0];
String b = "sandra";
//args[0] = "sandra";
if(a.equals(b))
{ System.out.println.("Beide Strings sind gleich"); }

Die if verzweigung wird immer durchlaufen. aber nur wenn ich diese eine Zeile
wieder auskommentiere dann gibt er Name, e-Mail Adresse etc. aus.
Ansonsten bekomme ich no Person found...

Das ist so unglaublich...
Ich versteh es nicht, an was das liegt

LG, Sandra


----------



## SlaterB (18. Nov 2011)

ok, dann ist der Logik nach wirklich praktisch nur noch ein Fehler möglich,
daran hatte ich nicht gedacht, zum Glück im Programm doch schnell zu finden, nicht von Dateien abhängig:

du vergleichst Strings mit == statt equals, somit wird nur die Konstante "sandra" gefunden, die im Quelltext überall dasselbe Objekt ist,
andere Strings mit gleichen Inhalt dagegen nicht,

im Download ist im DefaultAddressBookReader übrigens nur "person1" und "person2" definiert, gar keine "sandra"..


----------



## knuffi88 (18. Nov 2011)

Ich habe die Person sandra noch testweise hinzugefügt .
Also Person1 und Person2 führt zum gleichen Ergebnis.
Nur habe ich leider deine Erklärung nicht verstanden. welche codezeile
in welcher Datei meinst du denn? und was ist der Unterschied
zwischen den beiden übergebenen werten?
LG Sandra


----------



## SlaterB (18. Nov 2011)

Grundlagenthema:
Java Blog Buch : 03.02 Strings vergleichen

und die Codestelle ist offensichtlich die, wo in der Suche die Namen verglichen werden, die solltest du kennen,
bzw. dein ganzes Programm und sämtliche andere nach String-Vergleichen absuchen


----------



## knuffi88 (18. Nov 2011)

Ok d.h. ich ersetze alle == mit equals. trotzdem verstehe
ich immer noch nicht den Unterschied wenn ich eine String variable übergebe oder 
im Programm explizit eine String variable definieren. das müsste doch beides das selbe sein. sorry. Da stehe ich noch bisschen auf dem schlauch . wäre cool wenn du mir das nochmal genauer erklären könntest :bahnhof: danke. LG


----------



## SlaterB (18. Nov 2011)

alles dazu wird im Link bzw. in jedem Lehrbuch ausführlichst erklärt, hast du gelesen was bei


> Dies liegt daran, dass Java intern einen Pool für Zeichenketten verwendet. Verwenden Sie einen String, der bereits im Programm existiert (in diesem Fall verwendet str2 die selbe Zeichenkette wie str), wird kein neuer String erzeugt, sondern der String aus dem Pool zugewiesen. Dadurch verweisen auch wirklich beide Zeichenketten auf die selbe Stelle im Pool.


usw. steht?


----------

