在Java中,单词"String“不是关键字。也就是说,我们可以这样写:
String String = "";没有编译错误。
此外,java.lang.String类不能用作"instanceof“运算符的第二个参数。
为什么?Java编译器的String类有什么特别之处?为什么它不是关键字?
发布于 2012-03-06 06:46:00
首先,String是一个类名,而不是一个关键字。因此,您可以自由地将其用作变量名,尽管不推荐这样做。
其次,我不认为你关于"java.lang.String类不能用作"instanceof“运算符的第二个参数”的说法是正确的。
我已经创建了一个名为T2.java的测试程序,它可以按照预期进行编译和运行:
import java.util.*;
import java.util.regex.*;
import java.lang.reflect.*;
public class T2 {
public static void main(String[] args) throws Exception {
String String = "abc";
outputAll((String instanceof java.lang.String), String);
}
public static void outputAll(Object... args) {
System.out.println();
for (Object o: args) {
System.out.println(o);
}
}
public static void output(String msg, Object... args) {
System.out.println(String.format(msg, args));
}
}发布于 2012-03-06 06:36:46
String类可以用作instanceof运算符的类参数。我的猜测是,如果你有:
String String = ""
if(String instanceof String)
// ...编译器在instanceof的右侧看到String,并认为它不是类名,因为您在该作用域中定义了一个名为String的变量。
尝试重命名您的变量&看看会发生什么。
编辑:在看了alexvetter的答案后,我意识到我(在上面)是错的。String instanceof String对我来说工作得很好。
String不是一个关键字,因为它只是一个普通的类。关键字通常是为控制语言的东西保留的&如果用作变量,将会混淆含义并造成解析困难。您可以按照与使用String中的任何其他对象相同的方式使用Java。
发布于 2012-03-06 06:40:33
当然,您可以使用String作为instanceof的第二个参数。String类没有什么特别之处。instanceof的第二个参数需要一个Class,第一个参数需要一个表达式(变量是一个有效的表达式)。
这对我很有效(我试过了):
String String = "";
if(String instanceof String) {
System.out.println("hallo");
}https://stackoverflow.com/questions/9575091
复制相似问题