字符串的编译时间与运行时间解析
字符串的编译时解析:
当在字符串字面量和 '+'运算符的帮助下创建字符串时,它们会在编译时连接起来。这称为字符串的编译时解析。编译器消除了连接运算符并优化了字符串。
例子:
考虑下面的代码:
String str = "Geeks "
+ "for"
+ "Geeks";
编译器通过字符串的编译时解析对上述代码进行了优化:
String str = "GeeksforGeeks";
字符串的运行时分辨率:
当在字符串字面量以及变量和“+”运算符的帮助下创建字符串时,它们仅在运行时连接,因为变量的值无法事先预测。这称为字符串的运行时解析。
例子:
考虑下面的代码:
String str = "Geeks " + var + "Geeks";
由于变量 'var' 的值未知,因此编译器无法在编译时优化上述代码。因此字符串的运行时解析发生在这里。
不同的场景和识别分辨率的类型:
- 假设使用 StringBuffer 定义字符串:
String str = (new StringBuffer()) .append("Geeks") .append("for") .append("Geeks") .toString();
字符串解析的类型:字符串的运行时解析
这里编译器无法在编译时解析,因为对象创建是运行时活动。因此,上述字符串将在运行时解析。
- 假设使用 StringBuffer 定义字符串:
String str = "Geeks" + " " + "for" + " " + "Geeks";
字符串解析的类型:字符串的编译时解析
这里编译器可以在编译时解析,因为给定的 Strings 是 String 字面量。因此,上述字符串将在编译时解析。
- 假设 String 在 return 语句中定义:
public static String func(String var) { return "Geeks" + var + "Geeks"; }
字符串解析的类型:字符串的运行时解析
此处编译器无法在编译时解析,因为变量“var”的值是运行时活动。因此,上述字符串将在运行时解析。