Java File.getName()与字符串的比较不正确

Java File.getName()与字符串的比较不正确,java,string,if-statement,arraylist,Java,String,If Statement,Arraylist,我在一个类中有一个arrayList和一个getter。我需要创建一个方法,返回一个arrayList,其中包含第一个arrayList中与字符串arg同名的所有文件。这就是我想到的 ArrayList<File> dirs = new ArrayList<File>(); // filled with files public ArrayList<File> getDirectoriesNamed(String fileName) { ArrayL

我在一个类中有一个arrayList和一个getter。我需要创建一个方法,返回一个arrayList,其中包含第一个arrayList中与字符串arg同名的所有文件。这就是我想到的

ArrayList<File> dirs = new ArrayList<File>(); // filled with files

public ArrayList<File> getDirectoriesNamed(String fileName) {
    ArrayList<File> files = new ArrayList<File>();
    for (File file : dirs) {
        if (file.getName() == fileName) //problem is here
            files.add(file);
    }
    return files;
}
ArrayList dirs=new ArrayList();//满是文件
公共ArrayList GetDirectoriesName(字符串文件名){
ArrayList files=新的ArrayList();
for(文件:dirs){
如果(file.getName()==fileName)//问题就在这里
文件。添加(文件);
}
归还文件;
}

但是,当我尝试此操作时,会得到一个空的arrayList。我发现原因是因为if语句。。。有什么原因我看不出来的不起作用吗?

您正在用“==”比较两个字符串,使用
file.getName().equals(fileName)
两件事

1) 确保在字符串文件名中包含扩展名,例如filename.txt


2) 如果对象是字符串,并且您担心有.equalsIgnoreCase()的大写,则应将其与.equals()进行比较。我很确定==不是这里的问题,即使对象应该进行不同的比较==在java中确实适用于某些字符串对象。请注意,仅仅因为它有效并不意味着它是正确的

只是标记为重复。我投了反对票,因为我回答了正确的答案,但问题是重复的?看起来有点不公平,不是吗?是的,是的,这就是为什么我只给你留言。然而,这里的许多人非常不喜欢回答这样的问题,这些问题每天都会被问很多次,(对大多数人来说)显然是重复的。扩展不是问题,但感谢.equals()。这很有帮助。我刚刚意识到这个问题是个大问题。。。