Return by value mit String??

Status
Nicht offen für weitere Antworten.

Fredy

Mitglied
Hallo Java Guru,
ich hab ein kleine Problem, und zwar habe ich eine Methode, der ich einen (leeren) String übergebe. In der Methode selbst erzeuge ich einen StringBuffer, fülle diesen ab und möchte ihn dann dem String zuweisen. Das Problem ist nun, dass die Zuweisung zwar funktioniert, aber sobald der Programmablauf ausserhalb dieser Methode ist, der String wieder den alten Wert annimmt. Wer kann mir da weiterhelfen?
Hier noch der Code:
Code:
public void getProperty (String property)
{
	StringBuffer strBuf = new StringBuffer();
	// fuelle den StringBuffer mit Daten ab
	fillUp(strBuf);
	
	// kopiere den StringBuffer in den String
	property = strBuf.toString();
}

Es ist mir zwar klar, dass property als Referenz übergeben wird. Mir ist aber nicht klar, weshalb das Objekt strBuf wieder gelöscht wird, obwohl es noch referenziert wird.
Gelöst hab ich das Problem nun, indem ich direkt den StringBuffer übergebe und ihn nicht erst in der Methode erzeuge. Aber das müsste doch auch anders gehn, oder?
Hat jemand eine Idee?

Gruss Fredy
 

aquanox

Mitglied
Hi,

die Erklärung sollte nicht allzu schwer sein.

Ähnlich wie bei primitiven Datentypen (char, int, ...) wird der String nicht als Objekt übergeben.

Code:
public void getProperty (String property)
{

  // Du ruft die Methode nun auf mit getProperty(stringvar)
  // Allerdings wird bei einem String nicht die Referenz darauf zurückgegeben sondern
  // der Compilter könnte daraus sowas machen: getProperty(stringvar.toString()).
  // Das bedeutet, dass nun nur der Inhalt übergeben und dann hier in der Variable
  // property gespeichert wird. Problem liegt auf der Hand: property ist nur für die
  // eine Methode gültig, genauso wie strBuf, denn das Objekt wird ja lokal erstellt.
  // Lösung könnte sein, gleich ein StringBuffer Objekt zu übergeben oder mit einem
  // Rückgabeparameter zu arbeiten.

   StringBuffer strBuf = new StringBuffer();
   fillUp(strBuf);
   
   property = strBuf.toString();
}
 

mariopetr

Bekanntes Mitglied
na aber hallo,

der string wird sehr wohl als object uebergeben. das hat aber mit dem problem auch garnichts zu tun. da java prinzipiell call by value nutzt.

siehe dazu
Code:
public class Val
{
	public static void main(String[] args)
	{
		Val v=new Val();
		Object test=new Object();
		System.out.println(test);
		v.test(test);
		System.out.println(test);
		
	}
	
	void test(Object aObject)
	{
		aObject=new Object();
		System.out.println("new ="+aObject);
	}
}

Edit:
Bitte Code-Tags benutzen!
 

aquanox

Mitglied
Moin,

klar wird der String als Objekt übergeben, allerdins wird die Referenz dann nicht gespeichert sondern der Text. Nichts anderes wollte ich oben verdeutlichen.
 

Fredy

Mitglied
Herzlichen Dank für die Antwort!!

Ich habs jetzt gelöst, indem ich in der Methode einen StringBuffer erzeuge und ihn per 'return' zurück gebe. :D:D

Gruss und Dank Fredy

:wink: :wink:
 

DTR

Bekanntes Mitglied
Es wird schon die Referenz gespeichert. Bei Strings ist es nur das problem, das diese nicht geändert werden können. D.h.

String a = "Hallo";
a = a + "wie gehts?";

der neue String wird nicht im selben Objekt gespeichert, sonder es wird ein neues Objekt mit dem Wert "Hallo wie gehts" angelegt und der Zeiger a zeigt auf dieses neue Objekt. Das ist auch der grun für das Problem, das die Anwendungen so verdammt langsam werden, wenn man Strings direkt zusammen setzt anstatt einen StringBuffer zu verwenden.

Die beste Lösung für dein Problem ist es wohl den String als Rückgabewert zu übergeben oder statt einem String einen StringBuffer zu verwenden, dann geht es.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
rosima26 Unterschiedliche Werte bei return/print Allgemeine Java-Themen 12
LimDul Direktes return eines Array geht nicht Allgemeine Java-Themen 20
E Hat der Compiler einen Fehler oder warumbeendet return nicht eine Methode ? Allgemeine Java-Themen 7
I Java Optionals mit return-Block Allgemeine Java-Themen 2
R missing return statement Allgemeine Java-Themen 13
V int Array einer return Methode übergeben? Allgemeine Java-Themen 4
S OOP Objekte als Return-Werte: Einen Klon zurückgeben oder Instanz auf das Feld? Allgemeine Java-Themen 10
B XAResource[] return statement Allgemeine Java-Themen 3
V Wildcard aus Parameter in return type Allgemeine Java-Themen 2
P Return oder Global Allgemeine Java-Themen 3
W Rekursion-Probleme mit return Allgemeine Java-Themen 35
Dragonfire Code Konvention for-Schleife / return Allgemeine Java-Themen 15
B boolean return typ verwenden? Allgemeine Java-Themen 5
R return in try-catch-Blöcken Allgemeine Java-Themen 6
W return Collection mit schleife durchsuchen Allgemeine Java-Themen 10
H return bei Methode Allgemeine Java-Themen 2
chik 2 return werte für Greedy-Algorithmus (gelöst) Allgemeine Java-Themen 3
hdi dynamische return-Werte Allgemeine Java-Themen 15
M Problem mit return-werten Allgemeine Java-Themen 35
B Warum return type Object ? Allgemeine Java-Themen 4
D public boolean return Allgemeine Java-Themen 8
M return-Statement Allgemeine Java-Themen 5
S Wie Carriage Return Line Feed abfragen. Allgemeine Java-Themen 6
M java-doc: @return mehrzeilig gestalten Allgemeine Java-Themen 3
L return-Funktion Allgemeine Java-Themen 5
L return Funktion Allgemeine Java-Themen 6
G return bei generiertem code Allgemeine Java-Themen 6
S Fehler beim return eines String Arrays Allgemeine Java-Themen 3
W Socket.setSoTimeout -> BufferedReader -> Default value Allgemeine Java-Themen 4
M Thymeleaf th value und th text Allgemeine Java-Themen 1
N Value Wert aus HTML-Button mittels thymeleaf spring an java übergeben Allgemeine Java-Themen 2
Meeresgott Effizientester Weg um nach der Value einer verschachtelten Map aufzulösen Allgemeine Java-Themen 5
Thallius Key/Value Table in Klasse einlesen Allgemeine Java-Themen 14
S @Value mit bestimmt Werten, sonst default Allgemeine Java-Themen 42
H Klassen LibGDX - Verschiedene Klassen als Value in einer Map Allgemeine Java-Themen 8
B HashMap aus Value Key bekommen Allgemeine Java-Themen 2
F Unterschied zwischen NormalizedValue und Value Allgemeine Java-Themen 5
Q For-Schleife in String-Value Allgemeine Java-Themen 3
L Variablen HashMap nimmt value nicht an Allgemeine Java-Themen 3
M Java - Call by value <-> Call by reference Allgemeine Java-Themen 16
B Load of Known null Value Allgemeine Java-Themen 9
T Hashmap mit geordneter/ungeordneter liste als Value Allgemeine Java-Themen 5
algorismi int-variable Value Change event Allgemeine Java-Themen 3
G HTTP key-value-paar Allgemeine Java-Themen 8
J Map nach value sortieren Allgemeine Java-Themen 14
G Verschachtelte Treemaps, nach Value sortieren Allgemeine Java-Themen 11
faetzminator Regex zur Suche von "value-losen" Attributen in HTML Tags Allgemeine Java-Themen 7
T Set.contains() auch false wenn value == null? Allgemeine Java-Themen 4
G Generics in Map. Type of value abhängig vom key Allgemeine Java-Themen 3
S Map die die auch ein getKey(value) erlaubt? Allgemeine Java-Themen 2
MQue call by value Allgemeine Java-Themen 5
F Javadoc: @value tag nicht für private fields? Allgemeine Java-Themen 11
P call by value/referenz Allgemeine Java-Themen 4
N Sieht aus wie ein "Call by Referece/Call by Value" Allgemeine Java-Themen 7
S Call by Value Allgemeine Java-Themen 9
T [TreeMap] Corresponding value to a key Allgemeine Java-Themen 10
V Objekt aus Session als copy by value bekommen Allgemeine Java-Themen 4
R Wert in Hashtable ändern (Key ändern, Value bleibt) Allgemeine Java-Themen 3
H Aus der FAQ: Call by Value <-> Call by Reference Allgemeine Java-Themen 8
C Map(Key/Value) mit mehreren Values Allgemeine Java-Themen 16
M Value als String in beliebige Klasse konvertieren Allgemeine Java-Themen 18
OnDemand Java String in Hashmap als Key NULL Allgemeine Java-Themen 27
JAnruVA Datentypen Berechneten String-Wert in Double umwandeln um weiter zu rechnen Allgemeine Java-Themen 7
M String Allgemeine Java-Themen 10
M Suche nach String mit unbekannten characters Allgemeine Java-Themen 53
kodela String kann nicht zu Pfad konvertiert werden Allgemeine Java-Themen 16
melaniemueller Einzelne Zeile aus einer txt Datei in einem String speichern Allgemeine Java-Themen 12
E Objekte in einen String packen und wieder laden Allgemeine Java-Themen 5
M Map<String,String>funktioniert nicht richtig Allgemeine Java-Themen 4
O String in Long Hexerdezimal umwandel Allgemeine Java-Themen 14
N String vergleichen. Allgemeine Java-Themen 27
P String.replace() funktioniert nicht? Allgemeine Java-Themen 3
SaschaMeyer Arbeitet String.split falsch? Allgemeine Java-Themen 4
M Switches ohne String Allgemeine Java-Themen 18
AmsananKING String Iteration Allgemeine Java-Themen 5
S Shuffle String aus if-clause Allgemeine Java-Themen 11
Besset Variablen Ist String = "" + int inordnung? Allgemeine Java-Themen 6
M Map <Long, String> zu Map<String, Long> Allgemeine Java-Themen 9
S String Encoding Verständnisproblem Allgemeine Java-Themen 22
N Prüfen, ob ein String 2x das selbe Zeichen hat Allgemeine Java-Themen 10
SaftigMelo Bug Fixen von String-spliten Allgemeine Java-Themen 8
Monokuma String List nach Zahlen und Worten sortieren Allgemeine Java-Themen 9
Kingamadeus2000 Alle mehrfach vorkommenden Buchstaben rekursiv aus einem String entfernen. Allgemeine Java-Themen 6
YohnsonM String - Aufteilung und Nutzung einzelner Chars Allgemeine Java-Themen 7
O Formatierte String ausgabe bei vier Variablen in einer Zeile Allgemeine Java-Themen 1
S String umbenennen: wie? Allgemeine Java-Themen 4
x46 String Format Fehler Allgemeine Java-Themen 2
S ISO 8601 -> getter / setter String Allgemeine Java-Themen 3
L String zu repräsentativen Wert Allgemeine Java-Themen 0
H Array mit dem Datentype String[] initializieren Allgemeine Java-Themen 7
L ArrayList mit String Arrays in ein Array umwandeln Allgemeine Java-Themen 1
L regex ganzer string? Allgemeine Java-Themen 2
L Ist ein string ein erlaubter variabel name? Allgemeine Java-Themen 2
Z JNA Cpp-DLL String Verwendung Allgemeine Java-Themen 2
A String auf Zahlen überprüfen Allgemeine Java-Themen 5
N String Array Eingabe Allgemeine Java-Themen 6
MiMa Datum von String zu LocalDateTime Allgemeine Java-Themen 8
W String -> byte[] -> String - Sieht jemand was ich nicht sehe? Allgemeine Java-Themen 10
R char aus String entfernen Allgemeine Java-Themen 10
LimDul Mittels Streams aus Strings A B C den String A, B und C machen Allgemeine Java-Themen 12

Ähnliche Java Themen

Neue Themen


Oben