Android最终变量错误

时间:2012-07-22 01:10:12

标签: java android string final

当我写这段代码时,我看到了这个错误。

我看到“无法分配最终的局部变量peyvaDawi,因为它是在封闭类型中定义的”标记行。

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    ferheng=new Veritabani(this);
    final ImageButton btn=(ImageButton)findViewById(R.id.btnBigere);
    final EditText edtPeyv=(EditText)findViewById(R.id.edtPeyv);
    final RadioButton rbKT=(RadioButton)findViewById(R.id.rbKT);
    final RadioButton rbTK=(RadioButton)findViewById(R.id.rbTK);

    final String peyvaDawi="emre";
    btn.setOnClickListener(new View.OnClickListener() {

        public void onClick(View arg0) {
            final boolean KT=rbKT.isChecked();
            final boolean TK=rbTK.isChecked();

            sonuc="";
            String strPeyv=edtPeyv.getText().toString();
            Boolean tenePeyv=false;
            if(strPeyv==peyvaDawi)
                tenePeyv=true;
            else
                tenePeyv=false;
            if(KT)
                Arama(strPeyv,"kurdi",tenePeyv);
            if(TK)
                Arama(strPeyv,"tirki",tenePeyv);
                            peyvaDawi=strPeyv;//<<<<<<<<<<<<<<<<< i see error in this line.

        }
    });
}

我看到行中的错误peyvaDawi = strPeyv;

1 个答案:

答案 0 :(得分:3)

peyvaDawi被声明为final,因此一旦分配了值,就无法重新分配它。只是不要这样做。为什么要更改范围仅限于此方法的本地String变量的值?

也不要使用==比较字符串。请改用equals(...)equalsIgnoreCase(...)方法。理解==检查两个对象是否相同而不是您感兴趣的。另一方面,这些方法检查两个字符串是否具有相同顺序的相同字符,并且这才是最重要的。而不是

if (fu == "bar") {
  // do something
}

做,

if ("bar".equals(fu)) {
  // do something
}

,或者

if ("bar".equalsIgnoreCase(fu)) {
  // do something
}

此外,您应该在大括号中包含 所有 块,包括所有if,else块,即使它们只有一行,以免误导自己思考由于错位的缩进,一行代码在块中,而实际上并非如此。