📜  字符串的编译时间与运行时间解析

📅  最后修改于: 2022-05-13 01:55:45.687000             🧑  作者: Mango

字符串的编译时间与运行时间解析

字符串的编译时解析

当在字符串字面量和 '+'运算符的帮助下创建字符串时,它们会在编译时连接起来。这称为字符串的编译时解析。编译器消除了连接运算符并优化了字符串。

例子:

考虑下面的代码:

String str = "Geeks "
             + "for"
             + "Geeks";

编译器通过字符串的编译时解析对上述代码进行了优化:

String str = "GeeksforGeeks";

字符串的运行时分辨率

当在字符串字面量以及变量和“+”运算符的帮助下创建字符串时,它们仅在运行时连接,因为变量的值无法事先预测。这称为字符串的运行时解析。

例子:

考虑下面的代码:

String str = "Geeks " + var + "Geeks";

由于变量 'var' 的值未知,因此编译器无法在编译时优化上述代码。因此字符串的运行时解析发生在这里。

不同的场景和识别分辨率的类型:

  1. 假设使用 StringBuffer 定义字符串:
    String str = (new StringBuffer())
                     .append("Geeks")
                     .append("for")
                     .append("Geeks")
                     .toString();
    

    字符串解析的类型:字符串的运行时解析

    这里编译器无法在编译时解析,因为对象创建是运行时活动。因此,上述字符串将在运行时解析。

  2. 假设使用 StringBuffer 定义字符串:
    String str = "Geeks"
                 + " "
                 + "for"
                 + " "
                 + "Geeks";
    

    字符串解析的类型:字符串的编译时解析

    这里编译器可以在编译时解析,因为给定的 Strings 是 String 字面量。因此,上述字符串将在编译时解析。

  3. 假设 String 在 return 语句中定义:
    public static String func(String var)
    {
        return "Geeks" + var + "Geeks";
    }
    

    字符串解析的类型:字符串的运行时解析

    此处编译器无法在编译时解析,因为变量“var”的值是运行时活动。因此,上述字符串将在运行时解析。