Java代码返回null而不是字符串

时间:2014-09-04 02:29:34

标签: java string return return-value

我写了如下简单的代码。基本上在setString,我输入" Sentence"作为字符串,在getString中,它应该返回字符串。当我在Junit中测试时,它表示getString返回null而不是"句子"。

public class MyString implements MyStringInterface{
    public String str;

    //Sets the value of the current string
    public void setString(String str){
        str = "Sentence";
    }

    // Returns the current string
    public String getString(){
        return str;
    }
}

3 个答案:

答案 0 :(得分:5)

public void setString(String str){
    str = "Sentence";
}

在您致电str = "Sentence"的代码中,您实际上正在更改本地变量。

setString方法中,您将值设置为方法局部变量,而不是实例变量。因此,您的实例变量值不会被更改,它将具有默认值null。 您可以按如下方式更改方法

public void setString(String str){
    this.str = "Sentence"; // this.str = str;
}

P.S

在您的代码中,您将在setter方法中设置修复值。这是一个非常糟糕的做法,你不需要有一个制定者来做这样的事情。

答案 1 :(得分:0)

问题是setString()应该是

    public void setString(String str){
        this.str = str;
    }

然后你需要从主方法中调用

MyString s = new MyString();
s.setString("Sentence");

答案 2 :(得分:0)

    public void setString(String str){
        str = "Sentence";
    }

这里" str"在方法体中指的是字符串变量" str"它作为参数传递给方法。如果您有一个与参数名称同名的实例变量,请使用

    this.str = str;

"这"指的是self,因此this.str引用实例变量。在上面的例子中,我们覆盖了变量,因此没有将值设置为实例变量。

否则你可以这样做:

    public void setString(String formalParamStr){
        str = formalParamStr;
    }

现在按如下方式调用方法:

    instanceVar.setString("Sentence");