首页 > 其他 > 详细

String类编译期与运行期分析

时间:2014-12-29 08:59:30      阅读:263      评论:0      收藏:0      [点我收藏+]

字符串与字符串相加--字符串拼接时,有哪些特殊的地方?

在编译期与运行期这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类编译期与运行期分析

原文:http://blog.csdn.net/zhouboyu/article/details/42221393

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!