2017-03-15 97 views
0

當我從另一個類調用方法時,它將返回null。我就告訴你下面Java:從其他類返回的調用字符串返回方法null

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; 

    } 

} 

輸出看起來像我的代碼: STR基因座的一類___ //兩個類別含義空

str是從二級

我對此的理解是,在調用twoMethod()之後,最初爲null的str現在將被新的str值「From Two class」覆蓋。現在,當我們在一個類中打印str時,它應該與Two類中打印的內容相同。這就是我對流程的理解。

我錯過了關於傳遞字符串的任何概念/規則嗎?任何反饋意見。謝謝!

+1

你正在使用'str',好像java會與'pass-by-reference'一起工作,這就是爲什麼我標記爲'笨蛋'。你需要在'str'中重複使用'str',以便'str'從'return'得到一個值。那個beeing說,'twoMethod'中的'str'參數在那裏是無用的,因爲提供的String將被重新分配。 – SomeJavaGuy

+0

你應該閱讀關於Java中「不可變對象」的材料。你確實錯過了一個概念。 Oracle在https://docs.oracle.com/javase/tutorial/essential/concurrency/immutable.html上有一小段文檔(這裏是在併發環境中,因爲它是不可變對象最重要的主題)。 – Wis

+2

此外,這種說法是不正確的「一個類中的字符串是___ //空值」。變量str是空字符串。這與空無異。 – RubioRic

回答

0

我看到的問題不是該方法返回null。您尚未初始化您的類Two,並且您應該瞭解java是通過引用還是按值傳遞。在你調用它的一個方法之前,你應該初始化你的類。

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; 
} 
} 

除了對象初始化,請考慮你的問題下的註釋(字符串是不可變的,Java傳遞值)。

1

你應該這樣寫:

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

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

class one

0

Java按值傳遞對象的引用。因此,在下面的代碼段中,str未通過twoMethod(String)引用,並且String對象保持初始化狀態(空字符串)。

oneMethod() { 
    String str = ""; 
    two.twoMethod(str); 
    System.out.println("Str in One class is " + str); 
}