они равны друг другу:
new File("c:\\a") new File("c:\\a\\") new File("c:\\a","") new File("c:\\a\\","")
но new File("c:\\a","\\") не равно им
new File("c:\\a","\\")
но new File("c:\\a","\\b") равно new File("c:\\a","b")
new File("c:\\a","\\b")
new File("c:\\a","b")
почему
JavaDocs для java.io.File должно прояснить это.
java.io.File
File(File parent, String child) Creates a new File instance from a parent abstract pathname and a child pathname string. File(String pathname) Creates a new File instance by converting the given pathname string into an abstract pathname.
equals() - Сравнивает два абстрактных пути лексикографически .
equals()
Следующие распечатки показывают, что это не тот же путь.
System.out.println(new File("c:\\a").getAbsolutePath()); System.out.println(new File("c:\\a\\").getAbsolutePath()); System.out.println(new File("c:\\a","").getAbsolutePath()); System.out.println(new File("c:\\a\\","").getAbsolutePath()); System.out.println(new File("c:\\a","\\").getAbsolutePath()); System.out.println(new File("c:\\a","\\b").getAbsolutePath()); System.out.println(new File("c:\\a","b").getAbsolutePath());
вывод
c:\a c:\a c:\a c:\a c:\a\ c:\a\b c:\a\b
Я ничего не знаю о Java, но не так ли, потому что "c: \ a" - это файл, а "\" - это каталог?