Hjælp, kan ikke gennemskue denne fejl!

Tags:    java

Kort sagt. Har en JSP fil med en form, som bliver sendt over til en java fil. Her skal det indtastede konverteres til et tal, stadig i string form dog. Nå fra en ende af:

String form=request.getParameter("b");

form(kondition) bliver modtaget, og det man har skrevet i feltet i jsp filen bliver modtaget her, det er checket at det virker...

Nu skal det så konverteres...

form = Convert(form);

Og metoden:

public String Convert(String input) {

String output = null;

if (input == "disastrous"){ output = "1"; }
if (input == "wretched") { output = "2"; }

return output;
}

Hvis jeg så skriver disastrous i min form, så kommer der stadig bare null ud. ændre jeg start værdien på output stringen, er det dét som kommer til at stå i databasen.

Skriver jeg derimod:

form = Convert("disastrous");

Ja så retunere den 1 fint som så bliver lagt i databasen.

HELP! :)


[Redigeret d. 05/12-03 12:57:39 af Lars Poulsen]



6 svar postet i denne tråd vises herunder
1 indlæg har modtaget i alt 1 karma
Sorter efter stemmer Sorter efter dato
Det burde ikke have noget at sige, men prøv istedet at skrive :
<pre> if ( input.equals("wretched") ) </pre>
-AH

[Redigeret d. 05/12-03 13:02:29 af A.H.]



forkert svar.
-AH



forkert svar.
-AH


Det var skam rigtigt nok...altså

Fold kodeboks ind/udKode 


¨så... brug det som AH sagde...

-------------------------------
Hilsen Jimmi Westeberg
http://www.westsworld.dk

[Redigeret d. 05/12-03 13:17:57 af Jimmi Westerberg]



Selvom der er svaret på spørgsmålet kommer her forklaringen på dit problem...

Når man skal sammenligne primitive typer i Java anvendes == operatoren, men den fungerer ikke på samme måde når der er tale om sammenligning af objekter, og tekststrenge er objekter!

Når man anvender == operatoren på 2 objekter sammenlignes ikke indholdet af disse objekter (ækvivalens som med primitive typer), men selve "adresserne" på objekterne. Udtrykket er derfor kun sandt hvis der er tale om præcis samme objekt!

Ønsker man derfor at kunne sammenligne objekter på indhold bør man tilføje en implementation af metoden equals() i sine objekter.

Grunden til, at følgende udtryk alligevel er sandt:

Fold kodeboks ind/udKode 


...er at compileren kun opretter strengkonstanter 1 gang og genbruger samme objekt senere i koden. Det kan den tillade sig fordi at tekststrenge i Java er ikke "muterbare", dvs. du kan ikke ændre på indholdet af objektet når det først er oprettet. Derfor er følgende udsagn falsk:

Fold kodeboks ind/udKode 


Derfor.... brug altid equals() metoden når du skal sammenligne tekststrenge eller andre objekter medmindre du er interesseret i at finde et nøjagtigt objekt.



Bing, det vidste jeg jo egentlig godt. :-)



Takker for den udførlige forklaring :)



t