需要在java中通过引用传递String

时间:2013-07-01 17:24:46

标签: java reference

美好的一天,

我的程序需要一个函数:我需要检查服务器上的字符串,如果成功,它将返回一个布尔值true,并修改数据,如果没有在数据中放入错误消息并返回假。这是C ++的做事方式。

boolean getStringFromServer(String& data)

但是,我需要在Java中执行此操作。不要,我正在一个高度多线程的环境中工作。我听说你可以使用StringBuffer传入数据并进行修改。我真的可以获得示例代码吗?

3 个答案:

答案 0 :(得分:2)

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

你如何修改某人取决于你。看看java doc

顺便说一下,你不能在Java中修改String,因为它是不可变的。

答案 1 :(得分: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 ),因为char[]类使用的String保持字符为private,并且没有setter方法。此外,private char[]也是final,因此永远不会为其分配额外的引用。

正如其他用户建议的那样,您可以使用StringBuilder来完成您想要的工作。

答案 2 :(得分:0)

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

  1. 在java中,您无法更改String的值。
  2. 在java中,您可以将引用的值更改为String。
  3. 在java中,所有引用都按值传递。这意味着您可以在方法内更改String参数的值,但在方法退出时它将恢复为原始值。
  4. 这是一种糟糕的技术,但这是使用所述技术的简单解决方案:

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

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