【问题标题】:StringBuffer within Java constructor?Java构造函数中的StringBuffer?
【发布时间】:2015-02-22 03:17:21
【问题描述】:

当我在构造函数中使用 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 变量的值——但事实并非如此。有没有合适的方法来做到这一点?

【问题讨论】:

  • 您注释掉的代码绝对可以正常工作。请展示一个简短但完整的程序来说明问题 - 我强烈怀疑在尝试这样做时,您会发现它不再是问题(例如您之前误诊)或者您在其他地方发现了问题。
  • 你真的说过String sNumber = new StringBuilder(num).reverse().toString();吗?
  • 你们都是对的,尤其是@ajb。在我的工作区中,我写了String sNumber = new StringBuilder(num).reverse().toString();,但不知道为什么它不起作用。刚来的时候,写的对,还以为是错的。

标签: java class constructor scope stringbuffer


【解决方案1】:

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

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

不用临时变量也可以解决,如下:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-13
    • 1970-01-01
    • 1970-01-01
    • 2021-03-12
    • 2012-06-30
    • 2013-11-25
    相关资源
    最近更新 更多