首页 > 代码库 > String类编译期与运行期分析
String类编译期与运行期分析
字符串与字符串相加--字符串拼接时,有哪些特殊的地方?
在编译期与运行期这2个期间,字符串有何特点?
1、String s = "s1";
String s1 = "s"+1;
System.out.println(s=s1);
运行结果:true
编译期时,能确定s1的值--因为s是常量,1也是常量。在编译时,s1的值就已经等于s1了。
所以,输出时,s1对象不会创建,直接指向s所指的这个对象。
2、String s = "s1";
int ss = 1;
String s1 = "s"+ss;
System.out.println(s=s1);
运行结果:false
s和ss在编译期能确定值,但s1不能确定值。
对于s1这条语句来说,ss是一个变量。--变量必须在运行期才会确定其值运行到ss变量处才会确定其值。于是,s1在运行期后才会确定其值。
结论:在编译期时能确定其值的,可“=”;编译期不能确定其值的,不可“=”。
3、String c = "c1";
final int cc = 1;
String c1 = "c"+cc;
System.out.println(c=c1);
运行结果:true
在编译期,c,cc,c1都是确定的。cc之前加了final,就将变量变成为常量。即编译期时,cc这个变量是用1来代替了。
4、String d = "d1";
final int dd = getDD();
String d1 = "d"+dd;
System.out.println(d=d1);
public static int getDD(){
return 1;
}
运行结果:false
“=”对于对象而言,是比较“内存地址”。
虽然,dd之前加了final,但是要执行这句话之后,方法才能有返回值,即运行期才能确定其值,所以,编译期是不能确定dd的值的。
String类编译期与运行期分析