# Instanzvariablen mit Strings in Bean vergleichen...



## Guest (17. Mai 2004)

Hi,

ich habe folgendes Problem(eilt sehr!):

von einer JSP Seite werden Form Values, 1 Input Feld sowie 2 Selectfelder an eine Bean übergeben.

Die Bean soll nun die zwei Werte (source und target) der Select Felder mit einem String in der Bean vergleichen.

Im folgenden ein Code Snippet:
....
<code>
// Ergebnis berechnen
public double getErg() {


	// if clauses
  if ( source.equals("USD") && target.equals("EUR")){
  	erg = 3.0;

		return erg;
	}
	else {

		return erg;}
}</code>
....

leider erhalte ich immer folgende meldung des Tomcat:

javax.servlet.ServletException: An error occurred while getting property "erg" from an instance of class ...

root cause

java.lang.NullPointerException...

Woran liegts ?


----------



## bygones (18. Mai 2004)

kann es sein, dass die beiden Felder source und target nicht vorher initialisiert werden, d.h. sie sind null - und sie werden nicht über die Action gesetzt ? weil dann sind sie im Bean immer noch null --> nullpointer exception


----------



## Guest (18. Mai 2004)

Zunächst einmal vielen Dank für Deinen Beitrag.

Die Strings target und source sind allerdings initialisiert:
<code>
	   String amount;
	   String source;
	   String target;

</code>

Es ist vielmehr das Problem, dass die If Abfrage wohl nicht richtig funktioniert obwohl laut Eclipse syntaktisch korrekt.

Ein anderer Versuch liefert immer den erg value plus double 366.0

siehe:

<code>
	// Ergebnis berechnen



	public double getErg() {
		//StringToDouble
	//double xamount = Double.valueOf(amount).doubleValue();

		// if clauses
      if ( source == "USD" && target == "EUR"){
      	erg = 3.0;

			return erg;
		}
		else {

			return erg+366.0;}
	}

</code>

Instanzvariablen soll man ja nicht mit == vergleichen sonder mit equals.

An dieser Stelle wird deutlich, dass nicht in der If Abfrage mit dem Vergleich "eingestiegen" wird sondern gleich der else-Wert übergeben wird. - Aber warum ???


----------



## bygones (19. Mai 2004)

als erstes: nicht die code tags nicht mit < > schreiben sondern mit [ ] !!

zweitens, wenn du nur 

```
String amount;
String source;
String target;
```
schreibst, sind die variablen nur deklariert, nicht initialisiert. Defaultmäßig werden sie dann auf *null* gesetzt

```
String amount = "100";
String source = "USD";
String target = "EUR";
```
hier wurden sie nun auch initialisiert.

drittens, das mit dem '==' stimmt nur zum Teil. Durch das '==' vergleichst du bei Objekten ob es sich um die selbe Referenz handelt, nicht ob die Eigenschaften des Objekts gleich sind.

D.h. wenn du schreibst 

```
if ( source == "USD" && target == "EUR"){
```
ergibt das *nie* true, weil "USD" bzw "EUR" ein neues String Objekt sind und somit eine andere Refernez als source bzw. target !
--> Strings werden immer mit equals() auf Gleichheit überprüft !


----------

