针对Java 5编译web应用程序,但仍然允许String.isEmpty()吗?

针对Java 5编译web应用程序,但仍然允许String.isEmpty()吗?,java,netbeans,Java,Netbeans,我正在用Netbeans针对JavaEE5编译我的web应用程序。我知道只有Java 6才支持String.isEmpty()函数。尽管如此,我仍然可以使用代码中的.isEmpty()编译我的项目 如果我是针对Java EE 5进行编译,为什么Netbeans允许我的web应用程序进行编译?编译器级别不等于用于编译的JDK级别。编译器级别只检查语法,当然会创建不同的输出。但是编译器本身将在类路径上使用jdk,因此如果使用Java5选项编译,但在类路径上使用Java6JAR,代码将编译无误。 您应

我正在用Netbeans针对JavaEE5编译我的web应用程序。我知道只有Java 6才支持
String.isEmpty()
函数。尽管如此,我仍然可以使用代码中的
.isEmpty()
编译我的项目


如果我是针对Java EE 5进行编译,为什么Netbeans允许我的web应用程序进行编译?

编译器级别不等于用于编译的JDK级别。编译器级别只检查语法,当然会创建不同的输出。但是编译器本身将在类路径上使用jdk,因此如果使用Java5选项编译,但在类路径上使用Java6JAR,代码将编译无误。
您应该检查您的类路径。

正如许多人指出的那样,JavaEE版本与JavaSE(JDK)版本没有严格的联系。大多数情况下,它们需要最少的JavaSE版本,但与更高版本兼容

Java EE 5规范()规定:

由于JSE版本是向后兼容的,您可以使用与Java5兼容的容器,并在JavaSE6或JavaSE7上运行它

您可以通过检查项目“Properties>Source>Source/Binary Format”来检查Netbeans正在使用的兼容性级别


如果您对“Java vs Java EE”仍有疑问,您可以在这里查找几个关于Java SE和Java EE之间区别的问题。

关于什么类/接口
isEmpty()
似乎在
列表的1.5API中:@HunterMcMillen也许他指的是Java 5的类?()@Brian很难说OP什么时候不注意他们的帖子。是的,我在这里。对不起,耽搁了不到一小时。是的,我说的是字符串类。JavaEE版本和JavaSE版本不匹配。JavaEE5项目可以很好地在Java7上运行。您需要选择适当的JDK版本。关闭但不完全关闭。与类路径无关。编译器使用它附带的任何类。如果你想让它使用早期的JDK类,你需要使用-bootclasspath选项。
This specification requires that containers provide a Java Compatible™ runtime 
environment, as defined by the Java 2 Platform, Standard Edition, v5.0 specification 
(J2SE)