-1

次のコードがあります。

private String foo;

public void setFoo(String bar)
{
  foo = bar + "bin/";
}

このコードはバーを連結"bin/"し、オーバーロードされた'+'演算子を使用することを期待しています。そして、デバッガーでこの同じコード サンプルを実行すると、問題なく動作します。何らかの理由で、foo は常に bar と同じであり、決して含ま"bin/"れません。

実際のコード:

 private String execpath_;

  public void setMambaPath(String executable)
  {

    if (!(executable.endsWith("/")))
      executable = executable.concat("/");

    execpath_ = executable + "bin/";
  }

他の場所では、execpath_ = bin/: なしで実行可能です。

StringBuilder cmd = getSshCommand_();
cmd.append(execpath_ + "mambaService");

execpath_ は他の場所では使用しません

4

3 に答える 3

3

StringString不変変数であり、オブジェクト自体の内容を変更するメソッドは含まれません。したがって、メソッドを使用する必要がありますconcat()

または、使用できる2番目のアプローチStringBuilder

private String foo;

public void setFoo(String bar)
{
  StringBuilder builder = new StringBuilder();
  builder.append(bar + "bin/");
  foo = builder.toString();
}
于 2012-07-04T15:47:57.650 に答える
1

何がうまくいったか:

  public void setMambaPath(String executable)
  {

    if (!(executable.endsWith("/")))
      executable = executable.concat("/");

    executable = executable.concat("bin/");

    execpath_ = executable;
  }
于 2012-07-04T16:03:44.983 に答える
0

より多くのコードを投稿してください (foo後で使用する場所を含む)。foo他の場所で変更されているか、の代わりに変更されsetFooているローカルがあります。確かに初物だけど。foothis.foo

于 2012-07-04T15:44:59.597 に答える