string 常量池的理解
1:
String a="123";
String b="12"+"3";
String c="1"+"23";
System.out.println( a==b );true
System.out.println( a==c );true
2:
String a = "ab";
String bb = "b";
String b = "a" + bb;
System.out.println((a == b)); //result = false
3:
String a = "ab";
final String bb = "b";
String b = "a" + bb;
System.out.println((a == b)); //result = true
总结如下:
String s = "a" + "b" + "c";
就等价于String s = "abc";
String a = "a";
String b = "b";
String c = "c";
String s = a + b + c;
这个就不一样了,最终结果等于:
Java代码
StringBuffer temp = new StringBuffer();
temp.append(a).append(b).append(c);
String s = temp.toString();
看清了这个是等于,没错就是等于,为什么,这种情况太普遍了,java编译器早就对这个进行了优化,优化代码就是上面的那样的,
但是优化也不是万能的,复制一个经典垃圾代码:
String s = null;
for(int i = 0; i < 100; i++) {
s += "a";
}
这个代码就算优化也有100个stringbuilder对象,
最新文章
- jsfl脚本设置导出AS链接名遇到的奇怪问题
- 如何使用sysdba身份通过jdbc连接oracle?
- [AngularJS] Best Practise - Controller
- MarshalByRefObject浅析
- iOS获取当前app的名称和版本号-by
- mysql版本问题sql_mode=only_full_group_by
- 由查找session IP 展开---函数、触发器、包
- C++ 全局构造函数调用的顺序
- gridcontrol如何根据值来动态设置某一行的颜色
- Unity SteamVR插件集成
- linux学习笔记:1.基础知识和命令行基本操作
- OKHttp使用详解
- TCCSuperPlayerView让Delphi支持app视频播放!
- c、c++---linux上的GetTickCount函数
- IIS7的网站通过https访问提示ssl_error_rx_record_too_long
- js的浮点(小数)数+-*/
- 转:Uncovering Drupalgeddon 2(cve-2018-7600)漏洞深度解析(附漏洞利用代码地址)
- SLF4J和Logback日志框架详解
- python线程池应用场景-爬虫
- A full JDK must be specified