查看此.java
文件:
class A {
HashMap a;
}
它不编译;我需要import java.util.HashMap;
。现在考虑一下:
class A {
String a;
}
它完全相同 - 除了String
而不是HashMap
- 所以它不应该编译,对吧?错。
好的,众所周知,您不必导入String
,但为什么是这样的? “显而易见”的答案是因为String
的使用频率远远超过HashMap
,但是ArrayList
不应该“隐式导入”?原始包装类怎么样,例如Integer
和Boolean
? <{1}}和ArrayList
使用{em>远的次数比Long
少,但我必须导入Float
而不需要导入ArrayList
}}
不需要导入Float
,String
,Integer
,Character
和其他几个类的原因是什么?
答案 0 :(得分:6)
显而易见的答案是因为
String
的使用频率远远高于HashMap
。
没有。 String
属于java.lang
包,由编译器自动导入。
来自java.lang
javadoc:
提供对Java编程语言设计至关重要的类。最重要的类是
Object
,它是类层次结构的根,Class
,其实例在运行时表示类。
来自Java Language Specification. Chapter 7. Packages
包由许多编译单元(§7.3)组成。编译单元自动访问其包中声明的所有类型,并自动导入预定义包
public
中声明的所有java.lang
类型。
答案 1 :(得分:3)
您不必导入的那些类是java.lang
包中的那些类。
JLS, Chapter 7,声明:
编译单元自动访问其包中声明的所有类型,并自动导入预定义包java.lang中声明的所有公共类型。
String
,Integer
,Character
,Exception
和Boolean
都在java.lang
包中。但是,ArrayList
和HashMap
位于java.util
包中,如您所知,需要导入(或者可以完全限定)。