Probleme bei der Übergabe einer Variable

fLooojava

Bekanntes Mitglied
Hi Community,

ich habe eine getter & setter Methode, mitdem ich den Wert einer Seekbar an eine andere Methode weitergebe.
Java:
    public void setBrightness(int progress){
 		bright =progress;
 	}
 //getter
 public int getBrightnessvalue(){
  		return bright;
 }

Nun initialisiere ich ein neuer String mit state und füge den int-Wert, den ich von der getter Methode bekomme dem String bei, indem ich ihn zunächst in einen String umwandle. Soweit so gut, mein TextView wird richtig angezeigt. Beispielsweise "state1123". Wenn ich aber bei meiner sendValue Methode die Variable value verwenden möchte, passiert nichts. Übergebe ich meiner sendValue Methode also "value" geschieht leider nichts, schreibe ich es aber hart kodiert rein - sendValue("state1123") - klappt es wunderbar. Weshalb funktioniert hier meine Variablenübergabe nicht, wobei ich überprüfe, ob mein String value korrekt ist, indem ich ihn anzeigen lasse? UND er korrekt ist? ???:L :bahnhof:


Java:
String value = state+String.valueOf(getBrightnessvalue());
    		test.setText(state+String.valueOf(getBrightnessvalue()));
        	sendValue(value);

Würde mich über Tipps freuen!

Grüße
 
Hallo Harry Kane,

tut mir leid, ich dachte dies genügt. Hier noch weiterer Code:

Java:
seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener(){

    @Override
    public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
        progress = progress *20;
       setBrightness(progress);
       
        
    }

    @Override
    public void onStartTrackingTouch(SeekBar seekBar) {

    }

    @Override
    public void onStopTrackingTouch(SeekBar seekBar) {
    

    	if(getState()=="red"){
        	String value = state+String.valueOf(getBrightnessvalue());
    		test.setText(state+String.valueOf(getBrightnessvalue()));
        	sendValue(value);
        } else if (getState() =="green"){
        	String value = state+String.valueOf(getBrightnessvalue());
        	sendValue(value);
        } else if (getState() =="blue"){
        	String value = state+String.valueOf(getBrightnessvalue());
        	sendValue(value);
        }
    }
});

.. code ...

Java:
 public void setBrightness(int progress){
 		bright =progress;
 	}
 //getter
 public int getBrightnessvalue(){
  		return bright;
 }

Java:
 public void setState(String statecolor){
	  state = statecolor;
  }
  public String getState(){
	  return state;
  }

Hilft dir das? Gibt eigentlich nicht mehr Code, die diesen Fehler ansprechen. Die sendValue Methode hat ja nichts damit zu tun.
 
Das glaube ich nicht!
"equals" vergleicht die Inhalte der Strings
"==" vergleicht die Objektreferenzen

Glaub es ruhig, das Problem ist nämlich, es stimmt MANCHMAL, was wohl irgendwas damit zu tun hat, dass Java Strings in einem extra Pool vorhält. Wollte einem Nachhilfeschüler auch zeigen, dass == mit Strings nicht klappt und dann gab es doch true aus...😱
Aber um sich drauf zu verlassne, sollte man bei equals bleiben. 😉
 
Moin,

Glaub es ruhig, das Problem ist nämlich, es stimmt MANCHMAL, was wohl irgendwas damit zu tun hat, dass Java Strings in einem extra Pool vorhält. Wollte einem Nachhilfeschüler auch zeigen, dass == mit Strings nicht klappt und dann gab es doch true aus...😱
Natürlich wird dann TRUE zurückgegeben, wenn die REFERENZEN gleich sind!
Das hat aber nach wie vor, nichts mit dem Vergleich der Inhalte der Strings zu tun!

Hier noch mal zwei weitere Links, die es ganz gut erklären :
equals in Java
How do I compare strings in Java? - Stack Overflow

Gruß
Klaus
 
Zuletzt bearbeitet:
Hehe,

soweit zu

"Bei Java gibt es keine Pointer"

Nutzt einem trotzdem nichts. Wenn man das Prinzip Pointer nicht kapiert hat kann man halt nicht vernünftig programmieren. Egal welche Sprache.

Gruß

Claus
 
Jungs, lest ihr eigtentlich die Links, die man postet ???:L 🙁
Es hat wirklich nichts mit den Pointern zu tun, die man von C/C++ kennt !!

Also nochmal:
Java:
String a = "foo";
String b = "foo";
// Die JVM sucht String-Literale zuerst im String-Pool !
// Wenn es dort gefunden wird, dann wird eine Referenz darauf an den zweiten String 'b' gegeben! 
ergo: if( a == b ) liefert TRUE
----------------------------
String a = "foo";
String b = new String( "foo" );
// Hier wird das "new String" im Heap erzeugt und die Referenz DARAUF an 'b'
// gegeben!  Dadurch hat also 'b' eine Referenz im Heap und NICHT im String-Pool.
// ==> 'a' zeigt auf den String-Pool, 'b' auf den Heap 
ergo: if( a == b ) liefert FALSE

Oder anders ausgedrückt: mittels „==“ wird (lediglich) getestet, ob die zu überprüfende Objekte das selbe Objekt (exakt am selben Ort im Speicher !) referenzieren.
Wenn beide eine gemeinsame Instanzhaben, dann (und nur dann) gibt ein „==“-Vergleich ein „True“ zurück. Nur die Klassenmethode "equals" vergleicht den INHALT der Strings!

Hoffe, dass es jetzt klarer geworden ist !
Gruß
Klaus
 
Zuletzt bearbeitet:
Jungs, lest ihr eigtentlich die Links, die man postet ???:L 🙁
Es hat wirklich nichts mit den Pointern zu tun, die man von C/C++ kennt !!


Gruß
Klaus

Doch genau das hat es. Eine Referenz ist nunmal ein Pointer. Ein Pointer ist auch nichts anderes als ein Wert, nämlich die Speicheradresse. Vergleiche ich zwei Speicheradressen bekomme ich true wenn es die gleichen sind. Sind also zwei Strings an der gleichen Stelle im Speicher, dann sind sie natürlich auch die gleichen Strings.
Dummerweise ist das aber nicht umkehrbar. Das bedeuetet nämlich nicht, dass zwei Strings mit dem gleichen Inhalt auch an der gleichen Speicherstelle stehen.
Und wenn man das mal kapiert hat, dann leuchtet es auch ein warum man Strings nicht mit == vergleichen kann. Aber dazu gehört das Verständnis wie ein String im Speicher abgelegt ist, nämlich als ein Pointer auf einen Speicherbereich in dem lauter Zeichen stehen.

Gruß

Claus
 
ok, so gesehen hast Recht ... hätte besser "Verwendung von" schreiben sollen....
Wenn hier jemand im Zusammenhang mit Java das Wort "Pointer" verwendet, meint er ja i. d. R. das "Call-by-reference", dass es eben in dem Sinne nicht gibt!

Leider sorgen die Begrifflichkeiten immer wieder (gerade auch bei Neulingen) für Verwirrung ...

Gruß
Klaus
 
Nur nochmal zur Info,

Gleich und Identisch , sind 2 verschiedene Paar Schuhe !

Code:
==
Referenzgleichheit

Code:
.euqals(Object o);
Identitätsprüfung / Inhaltliche Übereinstimmung
Nur weil Zwillinge gleich aussehen sind es trotzdem nicht ein und die selbe Person 😉

oder mit anderen Worten

Referenziert das gleiche Objekt ist nicht das selbe wie, ist Identisch mit einem Objekt


Kleiner Tipp noch für den TO
[TIPP]Wenn man Instanzen von eigens erstellten Objekten vergleichen will sollte man Grundsätzlich IMMER

Java:
.equals(Object o);
.hashcode();
überschreiben !!

Da die Standardimplementierung von .equals(Object o); der Klasse Object nichts anderes macht als einen Referenzvergleich ![/TIPP]
 
Zuletzt bearbeitet:

Neue Themen


Zurück
Oben