为何编译大小写不一致的Java文件未出现问题?
你的核心误解点拆解
1. 没考虑操作系统文件系统的大小写敏感性差异
Windows的文件系统是大小写不敏感的,Test.java和test.java会被系统当成同一个文件。所以你执行javac Test.java时,系统会自动找到磁盘上的test.java,自然不会报“文件未找到”。
但换成Linux、macOS这类大小写敏感的系统,执行javac Test.java就会直接找不到文件,抛出对应错误。
2. 搞错了Java编译器的文件名检查逻辑
Java规范确实要求public类的类名必须和文件名完全一致(包括大小写),但编译器的检查对象是你编译命令里传入的文件名参数的主名称,不是磁盘上实际存的文件名。
你执行的是javac Test.java,编译器读取文件后,发现里面的public类是Test,和你传入的文件名主名称Test匹配,所以不会报错。要是你执行javac test.java,编译器就会发现类名Test和参数里的test不匹配,这时才会触发规范要求的错误。
3. 混淆了编译命令参数和实际磁盘文件名的关系
你默认觉得编译时的文件名参数必须和磁盘文件名严格一致,但在大小写不敏感的系统中,系统会自动做大小写映射,两者不需要完全匹配也能找到文件——这就是你没遇到文件未找到错误的关键。
内容的提问来源于stack exchange,提问作者yinyang2024
相关产品推荐
相关产品推荐

