Java构造函数中的StringBuffer?

Java构造函数中的StringBuffer?,java,class,constructor,scope,stringbuffer,Java,Class,Constructor,Scope,Stringbuffer,当我在构造函数中使用StringBuffer/StringBuilder创建一个新对象时,似乎需要创建一个临时变量并将其传递给初始化的类变量。也就是说,当我创建一个新实例时,我在构造函数中对sNumber(下面的示例)所做的更改不会影响对象变量的值——除非我使用一个temp变量。例如: public class Some_class { public static class algorithm{ String sNumber = ""; algorithm(String

当我在构造函数中使用StringBuffer/StringBuilder创建一个新对象时,似乎需要创建一个临时变量并将其传递给初始化的类变量。也就是说,当我创建一个新实例时,我在构造函数中对sNumber(下面的示例)所做的更改不会影响对象变量的值——除非我使用一个temp变量。例如:

public class Some_class {

  public static class algorithm{
    String sNumber = "";

    algorithm(String num){
      String temp = new StringBuilder(num).reverse().toString();
      sNumber = temp;

      //the below expression does not work:
      //sNumber = new StringBuilder(num).reverse().toString();
    }
我假设,由于我将新的StringBuilder/StringBuffer对象命名为相同的名称,它将覆盖先前初始化的sNumber变量的值——但事实并非如此。有没有合适的方法

我假设,由于我将新的StringBuilder/StringBuffer对象命名为相同的名称,它将覆盖先前初始化的sNumber变量的值

否,如果将StringBuilder命名为与字段相同的名称,它将隐藏该字段。(访问该字段的唯一方法是通过
this.sNumber

您可以在不使用临时变量的情况下进行求解,如下所示:

sNumber = new StringBuilder(num).reverse().toString();

(您在问题中说这不起作用,但它应该起作用。只需确保您没有在构造函数中将
sNumber
声明为局部变量。如果它仍然不起作用,您需要在问题中包含错误消息。)

您注释掉的代码将完全起作用。请展示一个简短但完整的程序来演示这个问题-我强烈怀疑,在尝试这样做时,您会发现它不再是一个问题(例如,您以前误诊了它),或者您在其他地方发现了问题。您是否真的说
String sNumber=new StringBuilder(num).reverse().toString()?你们都是对的,尤其是@ajb。在我的工作区中,我编写了
stringsnumber=newstringbuilder(num).reverse().toString()并且无法找出它为什么不工作。当我来到这里时,我用正确的方式写了它,并认为它是错误的。