0

我对这段代码有疑问。第 6 行的 if 语句在执行期间被忽略。我已经逐步完成了代码,变量 file[position] 的值是“subjects.dat”。但是,它会跳过此步骤并转到相关的 else 语句。任何想法为什么?

dialogButton.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                if (markComplete.isChecked()) {
                    String toDelete;
                    String[] files = fileList();
                    if (files[position] == "subjects.dat") { //the error occurs at this line
                        toDelete = files[position + 1];
                        boolean deleted = deleteFile(toDelete);
                        if (deleted) {
                            dialog.dismiss();
                        } else {
                            // Do nothing
                        }
                    } else {                            
                        toDelete = files[position];                     
                        boolean deleted = deleteFile(toDelete);
                        if (deleted) {
                            dialog.dismiss();
                        } else {
                            //Do nothing
                        }   
                    }

                }                   
            }

谢谢!

4

4 回答 4

6

您需要使用.equals()来比较两个字符串的实际值 - 否则您正在检查它们是否是同一个对象。

if (files[position].equals("subjects.dat")) { 
    // do stuff
}
于 2013-02-11T16:48:11.743 回答
1

始终使用 . 检查字符串是否相等equals() method==运算符检查两个引用变量是否指向同一个对象。

于 2013-02-11T16:48:33.723 回答
1

字符串是java中的对象,当您使用“==”时,您会比较引用(指针),它们通常是不同的(通常是因为对于短字符串进行了一些优化)。长话短说,使用

string.equals(anotherString)

代替

string == anotherString
于 2013-02-11T16:53:46.977 回答
0

字符串 - 使用 .equals()。== 永远不会给你真实的,因为对象是不同的。

而不是 files[position] == "subjects.dat" 使用 files[position].equals("subjects.dat")

于 2013-02-11T16:54:59.267 回答