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"这些没用的中间对象了。