Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
需要在java中通过引用传递字符串_Java_Reference - Fatal编程技术网

需要在java中通过引用传递字符串

需要在java中通过引用传递字符串,java,reference,Java,Reference,你好 我的程序需要这样一个函数:我需要检查服务器上的字符串,如果成功,它将返回布尔值true,并修改数据,如果不成功,则在数据中放置错误消息并返回false。这是C++的做事方式。 boolean getStringFromServer(String& data) 但是,我需要用Java来实现这一点。不用担心,我在一个高度多线程的环境中工作。我听说您可以使用StringBuffer传入数据并对其进行修改。我能得到一个示例代码吗 boolean getStringFromServer(S

你好

我的程序需要这样一个函数:我需要检查服务器上的字符串,如果成功,它将返回布尔值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;
}
你如何改变某人取决于你。请看下面的图片


顺便说一下,您不能在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
来实现您想要的功能。

以下是一些需要记住的事项:

  • 在java中,不能更改字符串的值
  • 在java中,可以将引用的值更改为字符串
  • 在java中,所有引用都是按值传递的。这意味着您可以在方法内更改字符串参数的值,但在方法退出时它会恢复为原始值
  • 这是一种不好的技术,但这里有一个使用该技术的简单解决方案:

    在名为HootBerry的文件中

    在其他文件中


    “更好”的解决方案是返回一个同时包含布尔值和错误消息的对象。

    是的,无法修改字符串参数与引用/值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;
      }
    }