好日子傳遞字符串,需要通過引用Java
我的程序需要的功能,例如:我需要檢查服務器上的一個字符串,如果它是成功的,它會返回一個true,並修改數據,如果沒有在數據中放置錯誤消息並返回false。這是C++的做事方式。
boolean getStringFromServer(String& data)
但是,我需要在Java中這樣做。不要,我正在一個高度多線程的環境中工作。我聽說你可以使用StringBuffer來傳遞數據並修改它。我真的可以得到一個示例代碼?
好日子傳遞字符串,需要通過引用Java
我的程序需要的功能,例如:我需要檢查服務器上的一個字符串,如果它是成功的,它會返回一個true,並修改數據,如果沒有在數據中放置錯誤消息並返回false。這是C++的做事方式。
boolean getStringFromServer(String& data)
但是,我需要在Java中這樣做。不要,我正在一個高度多線程的環境中工作。我聽說你可以使用StringBuffer來傳遞數據並修改它。我真的可以得到一個示例代碼?
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中的字符串,因爲它是不可變的。
是的,無法修改String參數與reference/value parm無關 - 這是因爲Strings是不可變的。 StringBuffers和其他幾個String類對象不是不可變的。 –
好吧,可以說上述函數存在於java中的靜態類/方法中。我通過一個線程調用它,我可以有多個線程調用上述方法是嗎?這意味着不同的Strinbuilder對象將被傳遞 – soulslicer0
@Raaj:如果你將不同的StringBuilder對象傳遞給靜態方法,那麼是的。 – Burkhard
針對有人說,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
來完成您想要的功能。
下面是要記住幾件事情:
這是一個不好的技術,但在這裏是用說技術一個簡單的解決方案:
文件名爲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具有布爾值和錯誤消息的項目。
爲什麼我有-6?! – soulslicer0
你有一個很高的負面因爲你沒有顯示你嘗試過的東西,並使用一個不相關的例子。在java中字符串是不可變的。你不能改變它。在java中沒有「直接」按引用傳遞。 – DwB
@Raaj你有_-8_,而不是_-6_,因爲你的問題質量很低。 – ST3