2017-03-15 1 views
0

Wenn ich eine Methode von der anderen Klasse aufruft, wird null zurückgegeben. Ich werde Ihnen nur meinen Code unten zeigenJava: Der Aufruf der String-Rückgabe-Methode aus einer anderen Klasse gibt null zurück

class One{ 

    Two two; 

    oneMethod(){ 
     String str = ""; 

     two.twoMethod(str); 
     S.o.p("Str in One class is " + str); 



    } 


} 


class Two{ 
    String twoMethod(String str){ 
     str = "From Two class"; 

     S.o.p("Str in Two class is " + str); 

     return str; 

    } 

} 

Die Ausgabe sieht so aus: Str in einer Klasse ist ___ // Bedeutung null

Str in zwei Klasse ist Von zwei Klasse

Nachdem ich twoMethod() aufgerufen habe, wird das str, das anfangs null ist, jetzt mit dem neuen str-Wert "From Two class" überschrieben. Wenn wir nun str in One-Klasse drucken, sollte es mit dem übereinstimmen, was in der Klasse Two gedruckt wird. So verstehe ich den Fluss.

Habe ich irgendein Konzept/Regel über die Weitergabe von Strings vermisst? Jede Rückmeldung wird geschätzt. Vielen Dank!

+1

du verwendest 'str', als ob java mit' pass-by-reference' arbeiten würde, deshalb wurde ich als dupe markiert. Sie müssen es in "One" ab "str = two.twoMethod (str);" eingeben, damit "str" ​​einen Wert von "return" erhält. Das heißt, Ihr "str" ​​-Parameter in 'twoMethod' ist/ist dort nutzlos, da der bereitgestellte' String' trotzdem neu zugewiesen wird. – SomeJavaGuy

+0

Sie sollten Materialien über "unveränderliche Objekte" in Java lesen. Du vermisst tatsächlich ein Konzept. Oracle hat eine kleine Dokumentation über https://docs.oracle.com/javase/tutorial/essential/concurrency/immutable.html (hier im Kontext der Parallelität, weil es das wichtigste Thema für unveränderliche Objekte ist). – Wis

+2

Auch diese Aussage ist nicht korrekt "Str in einer Klasse ist ___ // bedeutet null". Variable str ist die leere Zeichenfolge. Das ist ganz anders als null. – RubioRic

Antwort

0

Das Problem, ich sehe, ist nicht, dass die Methode null zurückgibt. Sie haben Ihre Klasse Two nicht initialisiert und Sie sollten verstehen, ob Java pass-by-reference oder pass-by-value ist. Sie sollten Ihre Klasse initialisieren, bevor Sie eine ihrer Methoden aufrufen.

class One{ 

Two two; 

oneMethod(){ 
    String str = ""; 
    Two two = new Two(); 
    str = two.twoMethod(str); 
    S.o.p("Str in One class is " + str); 
} 
} 


class Two{ 
String twoMethod(String str){ 
    str = "From Two class"; 
    S.o.p("Str in Two class is " + str); 
    return str; 
} 
} 

Neben der Objektinitialisierung beachten Sie bitte die Kommentare unter Ihrer Frage (String ist unveränderlich und Java-Pass-by-Value).

1

Sie sollten wie folgt schreiben:

class One{ 
    Two two; 
    oneMethod(){ 
    String str = ""; 

    str = two.twoMethod(str); 
    S.o.p("Str in One class is " + str); 
    } 
} 

für class one.

0

Java übergibt Referenzen auf Objekte nach Wert. Somit wird str in dem folgenden Codesegment twoMethod(String) nicht als Verweis übergeben und das String Objekt bleibt unverändert (leere Zeichenfolge).

Verwandte Themen