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

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




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值