当前位置: 首页 > 知识库问答 >
问题:

编译时间常量在Switch Case Java中的使用

西门梓
2023-03-14

>

  • case表达式的计算值必须为编译时间常数

    case(t)表达式必须具有与switch(t)相同的类型,其中t是类型(字符串)。

    如果运行此代码:

    public static void main(String[] args) {
        final String s=new String("abc");
        switch(s)
        {
           case (s):System.out.println("hi");
        }
    
    }
    

    是否意味着final String s=new String(“abc”);不是编译时间常量?

  • 共有1个答案

    南宫凡
    2023-03-14

    用这个,

        String s= new String("abc");
        final String lm = "abc";
    
        switch(s)
        {
           case lm:
               case "abc": //This is more precise as per the comments
               System.out.println("hi");
               break;
        }
    

    按照文件规定

    原始类型或类型字符串的变量,是最终的,并用编译时常数表达式(§15.28)初始化,称为常数变量

     类似资料:
    • 问题内容: Java语言文档说: 如果将原始类型或字符串定义为常量,并且在编译时知道该值,则编译器会使用其值替换代码中各处的常量名称。这称为编译时常量。 我的理解是,如果我们有一段代码: 然后,编译器会将x代码中每次出现的内容替换为literal 10。 但假设常量在运行时初始化: 与编译时常量相比,性能是否会下降(无论可以忽略不计)? 另一个问题是下面的代码行: 被编译器以与编译时常量相同的方式

    • 问题内容: 最终变量和编译时间常数之间有什么区别? 考虑以下代码 这是什么意思?何时以及如何为最终变量分配值?在运行时会发生什么,在编译时会发生什么?为什么要给switch一个编译时间常数?Java还有哪些其他结构需要编译时间常数? 问题答案: 问题在于, 所有语句在编译时 都 必须是最终的 。您的第一个陈述 是最终决定 。对于100%,除以外没有其他值。 然而,这 不能保证 对。如果周围有一个i

    • 是代码片段 如果是,和是编译时常量,还是指针本身就是(无论编译时意味着什么)? 如您所见,我通常对 数组及其在类/结构中的初始化感到有些困惑。请随意回答我的具体问题,还可以提及有关此主题的常见陷阱等。

    • 我们在600个使用Spock的groovy文件中进行了大量测试。所有的testclasses都是从一个AbstractSpecification.groovy扩展而来,它注入了许多服务类和许多使用这些类的帮助器方法(Spring,Autowired)。 我们使用Eclipse,当然,对抽象类的每一次更改都会导致重新编译(构建工作区,调用Maven Project Builder)。但是在开发过程中

    • 我试图创建一个编译时常量,这样R8就可以在最终的生产apk中省略调试代码。我遇到了一个路障,不可分配给。 进一步检查后,我发现用wrapper。 这里的问题是: 为什么不能将静态最终布尔值指定给常量值

    • 问题内容: 使用规则如下: case表达式必须计算为。 case(t)表达式必须与switch(t)具有相同的类型,其中t是类型(字符串)。 如果我运行此代码: 它给出Compile-error为: 另一方面,如果我尝试使用,它可以正常工作。 据我所知, 是对位于堆上的对象的引用。并且它本身是一个编译时常量。 这是否意味着不是编译时间常数? 问题答案: 用这个, 根据文档 基本类型或String类