当我在构造函数中使用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 变量的值 - 但事实并非如此。有没有正确的方法来做到这一点?
答案 0 :(得分:3)
我假设因为我将新的StringBuilder / StringBuffer对象命名为相同的名称,它将覆盖先前初始化的sNumber变量的值
不,如果您将StringBuilder命名为与该字段相同的名称,它将隐藏该字段。 (访问该字段的唯一方法是通过this.sNumber
。)
您可以在没有临时变量的情况下解决它,如下所示:
sNumber = new StringBuilder(num).reverse().toString();
(你在问题中说这不起作用,但它应该。确保你没有在构造函数中声明sNumber
作为局部变量。如果它仍然没有工作,你需要在你的问题中包含错误信息。)