2013-07-01 113 views
-8

好日子傳遞字符串,需要通過引用Java

我的程序需要的功能,例如:我需要檢查服務器上的一個字符串,如果它是成功的,它會返回一個true,並修改數據,如果沒有在數據中放置錯誤消息並返回false。這是C++的做事方式。

boolean getStringFromServer(String& data) 

但是,我需要在Java中這樣做。不要,我正在一個高度多線程的環境中工作。我聽說你可以使用StringBuffer來傳遞數據並修改它。我真的可以得到一個示例代碼?

+0

爲什麼我有-6?! – soulslicer0

+0

你有一個很高的負面因爲你沒有顯示你嘗試過的東西,並使用一個不相關的例子。在java中字符串是不可變的。你不能改變它。在java中沒有「直接」按引用傳遞。 – DwB

+0

@Raaj你有_-8_,而不是_-6_,因爲你的問題質量很低。 – ST3

回答

2
boolean getStringFromServer(StringBuilder sb) 
{ 
    if(sb.indexOf("some magic string")!=-1) 
    { 
    //string found 
    return true; 
    } 
    //not found 
    //modify sb 
    return false; 
} 

如何修改sb取決於您。看看java doc

順便說一句,您不能修改Java中的字符串,因爲它是不可變的。

+0

是的,無法修改String參數與reference/value parm無關 - 這是因爲Strings是不可變的。 StringBuffers和其他幾個String類對象不是不可變的。 –

+0

好吧,可以說上述函數存在於java中的靜態類/方法中。我通過一個線程調用它,我可以有多個線程調用上述方法是嗎?這意味着不同的Strinbuilder對象將被傳遞 – soulslicer0

+0

@Raaj:如果你將不同的StringBuilder對象傳遞給靜態方法,那麼是的。 – Burkhard

0

針對有人說,Java完全是按價值傳遞的。即使人們說數組和對象都是通過引用傳遞的,他們的真正含義是數組和對象的引用是按值傳遞的。例如,

public static void main(String[] args) 
    { 
     int[] numbers = new int[]{1,2,3}; 
     change(numbers); 
     System.out.println(Arrays.toString(numbers)); //prints [1,2,3] 
    } 

    public static void change(int[] ra) 
    { 
     ra = new int[]{4,5,6}; 
    } 

儘管如此,這並不此問題。 Strings是不可變的。這是因爲您無法訪問其索引來更改它們(您可以使用charAt()來查看哪些char處於特定索引處,但無法更改char),因爲String類使用的char[]會保留字符是private並且沒有setter方法。另外,private char[]也是final,所以它永遠不會被分配一個額外的參考。

正如另一位用戶所建議的,您可以使用StringBuilder來完成您想要的功能。

0

下面是要記住幾件事情:

  1. 在java中,你不能改變一個字符串的值。
  2. 在java中,您可以將引用的值更改爲String。
  3. 在java中,所有引用都按值傳遞。這意味着您可以更改方法內部的String參數的值,但當方法退出時它會恢復爲原始值。

這是一個不好的技術,但在這裏是用說技術一個簡單的解決方案:

文件名爲HootBerry

public class HootBerry 
{ 
    private String value; 

    HootBerry(final String initialValue) 
    { 
    value = initialValue; 
    } 

    public String getValue() 
    { 
    return value; 
    } 

    public void setValue(final String newValue) 
    { 
    value = newValue; 
    } 
} 

在其他一些文件

public boolean blammo(final HootBerry data) 
{ 
    if *data is blammo* // use approparite java code here 
    { 
    return true; 
    } 
    else 
    { 
    blammo.setValue("data is not blammo"); 
    return false; 
    } 
}

「更好」的解決方案是返回一個ob具有布爾值和錯誤消息的項目。