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

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声明为局部变量。如果仍然不起作用,则需要包含错误消息在您的问题中。)

10-07 18:56