您的位置:首页 > 产品设计 > UI/UE

双等号与equals区别及StringBuffer与StringBuilder区别及StringBuilder对String的优化

2012-08-17 14:26 537 查看
1、创建数组有三个步骤:声明、创建、初始化。
2、数组遍历 增强型:for(Object tem:s){}。
3、String为引用型数组和二维数组一样;String实质是一个字符(char)数组。
4、双等号和equals区别:
双等号:二进制的比较(地址)是同一个对象的比较。
equals:比较的是引用数据类型意义上相等(数值相等)当时不是同一对象(引用不同)。
Object类的equals相当于双等号。
5、String:如果不用new创建则在常量池中创建,也就是就说new一个String实际上创建了两个对象(在堆了和常量池中)。
String s = "he"+"llo"相当于String s = "hello"(变量折叠;语义分析系统自动优化)。
6、StringBuffer与StringBuilder区别:
StringBuffer:多线程;线程安全的;所用时间相对较长。
StringBuilder:单线程;线程不安全;所用时间相对较短。
两者都有:加字符串时用append()方法(是直接加进去没有再new出一个对象)。
例:StringBuffer sb = new StringBuffer("aaa");sb.append("bbb");系统没有new出一个"bbb"的对象在常量池中



String s = new String("aaa");s=s+"bbb";


则new了一个"bbb"的对象

所以String是不可变的StringBuilder和StringBuffer是可变的。

注意:当sb为null时StringBuffer空间有char[16](申明时就申请的空间)

sb.length 是求存的字符数那16是加对象进去的的。

7、StringBuilder对String的优化(java5.0之后是系统自动优化的)

"+"操作换成StringBuilder的append()方法

例:

String s1 = "I";
String s2 = s1+"like";
String s3 = s2+"java";

反编译之后为

String s1 = "I";
String s2 = (new StringBuilder(String.valueOf(s1))).append("like").toString();
String s3 = (new StringBuilder(String.valueOf(s2))).append("java").toString();
这样就少了在常量池中的"like","java","I like","i like java"这些没用的中间对象了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: