首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >String类的Java奇怪特性

String类的Java奇怪特性
EN

Stack Overflow用户
提问于 2012-03-06 06:33:55
回答 3查看 634关注 0票数 0

在Java中,单词"String“不是关键字。也就是说,我们可以这样写:

代码语言:javascript
复制
String String = "";

没有编译错误。

此外,java.lang.String类不能用作"instanceof“运算符的第二个参数。

为什么?Java编译器的String类有什么特别之处?为什么它不是关键字?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-03-06 06:46:00

首先,String是一个类名,而不是一个关键字。因此,您可以自由地将其用作变量名,尽管不推荐这样做。

其次,我不认为你关于"java.lang.String类不能用作"instanceof“运算符的第二个参数”的说法是正确的。

我已经创建了一个名为T2.java的测试程序,它可以按照预期进行编译和运行:

代码语言:javascript
复制
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));
    }
}
票数 3
EN

Stack Overflow用户

发布于 2012-03-06 06:36:46

String类可以用作instanceof运算符的类参数。我的猜测是,如果你有:

代码语言:javascript
复制
String String = ""
if(String instanceof String)
  // ...

编译器在instanceof的右侧看到String,并认为它不是类名,因为您在该作用域中定义了一个名为String的变量。

尝试重命名您的变量&看看会发生什么。

编辑:在看了alexvetter的答案后,我意识到我(在上面)是错的。String instanceof String对我来说工作得很好。

String不是一个关键字,因为它只是一个普通的类。关键字通常是为控制语言的东西保留的&如果用作变量,将会混淆含义并造成解析困难。您可以按照与使用String中的任何其他对象相同的方式使用Java。

票数 2
EN

Stack Overflow用户

发布于 2012-03-06 06:40:33

当然,您可以使用String作为instanceof的第二个参数。String类没有什么特别之处。instanceof的第二个参数需要一个Class,第一个参数需要一个表达式(变量是一个有效的表达式)。

这对我很有效(我试过了):

代码语言:javascript
复制
String String = "";
if(String instanceof String) {
     System.out.println("hallo");
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9575091

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档