Android string变量字符串与final字符串区别

intnum=1;Stringstr="0"+1;Stringstr1="0"+num;finalStringstr2="0"+num;为什么程序运行的时候str和st2... int num=1;
String str="0"+1;
String str1="0"+num;
final String str2="0"+num;
为什么程序运行的时候str和st2可以运行成功,但是str1不能运行成功?
求解啊!!!
展开
 我来答
安琪拉卑鄙
推荐于2017-09-25 · TA获得超过614个赞
知道小有建树答主
回答量:751
采纳率:50%
帮助的人:602万
展开全部
String a = "a1";
String b = "a" + 1;
System.out.println((a == b)); //result = true
JVM对于字符串常量的"+"号连接,将程序编译期,JVM就将常量字符串的"+"连接优化为连接后的值,拿"a" + 1来说,经编译器优化后在class中就已经是a1。在编译期其字符串常量的值就确定下来,故结果为true。

str1失败的原因是连接优化不能优化String类型的值,这个"0"+num被理解为0这个字符串后面接上num这个字符串。可以试试"0"+String.valueOf(num);

String a = "ab";
final String bb = "b";
String b = "a" + bb;
System.out.println((a == b)); //result = true
bb字符串加了final修饰,对于final修饰的变量,它在编译时被解析为常量值的一个本地拷贝存储到自己的常量池中或嵌入到它的字节码流中。
所以此时的"a" + bb和"a" + "b"效果是一样的。故结果为true。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式