A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© qq496099229   /  2015-5-23 18:24  /  1456 人查看  /  29 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

小志的漫游 发表于 2015-5-25 16:19
String a="a"+"b"+1;  //java的常量优化机制,在编译的时候自动生成ab1字符串,常量池中就有ab1字符串
Strin ...

讲得好详细,学到了
回复 使用道具 举报
小志的漫游 发表于 2015-5-25 16:19
String a="a"+"b"+1;  //java的常量优化机制,在编译的时候自动生成ab1字符串,常量池中就有ab1字符串
Strin ...

变量与常量的“+”,底层就是new StringBuffer()或是new StringBuilder()对象通过其中的append方法先将"a"追加进堆内存中,再次通过append方法把"f"也追加到"a"上来了,此时得到的是StringBufffer类型或是StringBuilder类型的"af", 再通过StringBufffer对象或StringBuilder对象中的toString方法转换String对象.这些过程都是在堆内存中进行的.
回复 使用道具 举报
这就是常量池的问题
回复 使用道具 举报
反编译一下看看编译器是怎么优化你的代码的,,你就懂了
回复 使用道具 举报
小志的漫游 发表于 2015-5-25 16:19
String a="a"+"b"+1;  //java的常量优化机制,在编译的时候自动生成ab1字符串,常量池中就有ab1字符串
Strin ...

又学到了点,谢谢
回复 使用道具 举报
qq496099229 发表于 2015-5-23 19:42
final String a="a";
String b=a+"f";
String c="af";

字符连接?
回复 使用道具 举报
前面学的都忘了。。
回复 使用道具 举报
“==”,不仅仅是内容的比较,还有内存地址的比较。equals,仅仅是比较内容。为什么能连接到1,设计到类型装还的问题。int可以默认转换为string。不知道这样解释对不对!
回复 使用道具 举报
12
您需要登录后才可以回帖 登录 | 加入黑马