为什么可以创建 String.java?

why is it possible to create String.java?

只是想了解为什么我能够创建 String.java 文件并且编译时没有任何错误。据我所知,类加载器链将转到 Bootstrap 个类加载器,它已经加载了 Sting.class。 你能帮我理解一下吗?

A class 不仅由其名称标识,而且由其完全限定名称标识,即包的名称后跟 class.[=18= 的名称]

如果您在某个包 com.myapp 中创建自己的 String class,那么它的完全限定名称将为 com.myapp.String。它与具有完全限定名称 java.lang.String.

的标准 String class 不冲突

当然,当你这样做的时候会很混乱,特别是因为包 java.lang 中的 classes 是默认导入的。因此,在实践中,你永远不应该编写自己的 class String,或者将你自己的任何 class 命名为与标准库中的 class 相同(尤其是标准 classes 来自包 java.lang).

正如 Jesper 强调的那样,class 的唯一性由其完全限定名称决定,即 package..

尝试将两个字符串 class 都导入到另一个 class 中,您将在尝试使用它时观察到差异。

import java.lang.String;
import com.myclass.String;

现在,为了解决歧义,您需要通过其完全限定名称引用 class。