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不能运行成功?
求解啊!!! 展开
String str="0"+1;
String str1="0"+num;
final String str2="0"+num;
为什么程序运行的时候str和st2可以运行成功,但是str1不能运行成功?
求解啊!!! 展开
1个回答
展开全部
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。
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。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询