首页 > 代码库 > 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类编译期与运行期分析