需要在java中通过引用传递字符串
你好 我的程序需要这样一个函数:我需要检查服务器上的字符串,如果成功,它将返回布尔值true,并修改数据,如果不成功,则在数据中放置错误消息并返回false。这是C++的做事方式。需要在java中通过引用传递字符串,java,reference,Java,Reference,你好 我的程序需要这样一个函数:我需要检查服务器上的字符串,如果成功,它将返回布尔值true,并修改数据,如果不成功,则在数据中放置错误消息并返回false。这是C++的做事方式。 boolean getStringFromServer(String& data) 但是,我需要用Java来实现这一点。不用担心,我在一个高度多线程的环境中工作。我听说您可以使用StringBuffer传入数据并对其进行修改。我能得到一个示例代码吗 boolean getStringFromServer(S
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;
}
你如何改变某人取决于你。请看下面的图片
顺便说一下,您不能在Java中修改字符串,因为它是不可变的。有人说,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};
}
尽管如此,这不是这里的问题<代码>字符串是不可变的。这是因为您无法访问它们的索引来更改它们(您可以使用charAt()
查看特定索引中的char
是什么,但无法更改char
),因为char[]字符串
类使用的保持字符的
是私有的
,并且没有setter方法。此外,该private char[]
也是final
,因此不能为其分配额外的引用
正如另一位用户所建议的,您可以使用
StringBuilder
来实现您想要的功能。以下是一些需要记住的事项:
“更好”的解决方案是返回一个同时包含布尔值和错误消息的对象。是的,无法修改字符串参数与引用/值parm无关——这只是因为字符串是不可变的。StringBuffers和其他一些类似字符串的对象不是不可变的。我通过一个线程调用来访问它,我可以让多个线程调用上面的方法是吗?这意味着将通过不同的Strinbuilder对象din@Raaj:如果将不同的StringBuilder对象传递给静态方法,则是。StringBuilder是否在函数结束时被销毁?很抱歉,我来自C语言背景,这整个java对meNo来说都是新事物,但事实并非如此。它已声明在此方法的范围之外。您的否定值很高,因为您没有显示您尝试过的内容,并且使用了一个不相关的示例。字符串在java中是不可变的。你不能改变它。java中没有“直接”传递引用。@Raaj您有-8,而不是-6,因为您的问题质量很低。那么我如何停止这个问题?它每天都得到反对票?
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;
}
}