-1

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

我在标记行中看到“无法分配最终的局部变量 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 行中看到错误;

4

1 回答 1

3

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

也不要使用==. 请改用equals(...)orequalsIgnoreCase(...)方法。了解 == 检查两个对象是否相同,这不是您感兴趣的。另一方面,这些方法检查两个字符串是否具有相同顺序的相同字符,这在这里很重要。所以而不是

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

做,

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

或者,

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

此外,您应该将所有块括在花括号中,包括所有 if、else 块,即使它们只有一行长,以免误导自己认为由于错位的缩进而导致一行代码在块中,而实际上它不是不。

于 2012-07-22T01:12:37.360 回答