Java 字符串的编译时间与运行时间解析
字符串的编译时解析
当字符串在字符串字面意义和’+’运算符的帮助下被创建时,它们在编译时被连接起来。这被称为字符串的编译时解析。编译器消除了连接运算符并优化了字符串。
例子。
考虑一下下面的代码。
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";
字符串解析的类型。编译时对字符串的解析
这里编译器可以在编译时解决,因为给定的字符串是字符串字面。因此,上述字符串将在编译时被解析。
- 假设字符串被定义在一个返回语句中。
public static String func(String var)
{
return "Geeks" + var + "Geeks";
}
字符串解析的类型。字符串的运行时解析
这里编译器不能在编译时解决,因为变量’var’的值是运行时的活动。因此,上述字符串将在运行时被解析。