在getter方法中,我应该克隆返回的String吗?

时间:2013-02-11 18:06:46

标签: java string field getter-setter cloning

在Java中,建议在getter方法中返回字符串时创建另一个String。 my_name是类的String字段。

public String getName()
{
    String rString = my_name.toString();
    return rString;
}

2 个答案:

答案 0 :(得分:11)

  

在Java中,建议在返回时创建另一个String   getter方法中字符串的字符串。 my_name是一个String字段   一个班级。

,这样做没有意义。由于Java中的字符串是 immutable ,当您尝试修改getter方法返回的字符串时(即重新分配当前指向字符串对象的String引用,到另一个字符串) ,它将创建一个新字符串,并将该字符串的引用分配给当前字符串引用,从而将其与原始字符串分离。

但是,如果您有mutable字段,例如array,那么在这种情况下,如果您希望对象是不可变的,建议您返回它的防御副本。

答案 1 :(得分:2)

没有。在Java中,字符串是不可变的,因此无论是谁调用getter都无法修改它。

此外,由于Java池字符串重用它们的方式,您的代码将完全与直接返回字段完全相同。