The most important distinction is that toRealPath() operates on actual file system records, whereas toAbsolutePath() is based on theory. For example, you can create a dozen Path objects that's do not exist, perform numerous operations in them such as relativize(), toAbsolutePath(), normalize(), etc. Once you call toRealPath(), though, the application will throw an exception if the Path does not exist.