9.8 比较字符串是否是同一个对象str1和str2的内容一定是一样的!但是,并不是同一个字符串对象 。
==用于判断是否是同一个字符串对象 。
是否是同一个对象-特例String str1 = "the light";String str3 = "the light";System.out.println( str1==str3);
一般说来 , 编译器每碰到一个字符串的字面值 , 就会创建一个新的对象 。所以在第6行会创建了一个新的字符串"the light"; 但是在第7行,编译器发现已经存在现成的"the light",那么就直接拿来使用,而没有进行重复创建 。
内容是否相同使用equals进行字符串内容的比较,必须大小写一致; equalsIgnoreCase,忽略大小写判断内容是否一致 。
是否以子字符串开始或者结束startsWith //以...开始;endsWith //以...结束 。
练习-比较字符串创建一个长度是100的字符串数组,使用长度是2的随机字符填充该字符串数组 。统计这个字符串数组里重复的字符串有多少种
学了hash再来做吧..
9.9 StringBuffer*
StringBuffer是可变长的字符串
追加 删除 插入 反转append追加;delete 删除;insert 插入;reverse 反转.
package character;public class TestString {public static void main(String[] args) {String str1 = "let there ";StringBuffer sb = new StringBuffer(str1); //根据str1创建一个StringBuffer对象sb.append("be light"); //在最后追加System.out.println(sb);sb.delete(4, 10);//删除4-10之间的字符System.out.println(sb);sb.insert(4, "there ");//在4这个位置插入 thereSystem.out.println(sb);sb.reverse(); //反转System.out.println(sb);}}
长度 容量为什么StringBuffer可以变长? 和String内部是一个字符数组一样,StringBuffer也维护了一个字符数组 。但是 , 这个字符数组,留有冗余长度 。
比如说new StringBuffer("the") , 其内部的字符数组的长度,是19,而不是3,这样调用插入和追加,在现成的数组的基础上就可以完成了 。如果追加的长度超过了19 , 就会分配一个新的数组,长度比原来多一些,把原来的数据复制到新的数组中,看上去 数组长度就变长了 。length: “the”的长度 3;capacity: 分配的总空间 19 。
public class TestString {public static void main(String[] args) {String str1 = "the";StringBuffer sb = new StringBuffer(str1);System.out.println(sb.length()); //内容长度System.out.println(sb.capacity());//总空间} }练习-StringBuffer性能String与StringBuffer的性能区别?
生成10位长度的随机字符串 然后,先使用String的+,连接10000个随机字符串,计算消耗的时间 然后,再使用StringBuffer连接10000个随机字符串,计算消耗的时间
提示: 使用System.currentTimeMillis() 获取当前时间(毫秒)
public static void main(String[] args) {long start = System.currentTimeMillis();String s1 = "";for (int i=0;i<10000;i++){s1 += 'a';}long end = System.currentTimeMillis();System.out.println("string总共耗时了:"+(end-start));long start2 = System.currentTimeMillis();StringBuffer sb = new StringBuffer();for (int i=0;i<10000;i++){sb.append('a');}long end2 = System.currentTimeMillis();System.out.println("stringbuffer总共耗时了:"+(end2-start2));}
练习-MyStringBuffer根据接口IStringBuffer,自己做一个MyStringBuffer
IStringBuffer.java
package character;public interface IStringBuffer {public void append(String str); //追加字符串public void append(char c);//追加字符public void insert(int pos,char b); //指定位置插入字符public void insert(int pos,String b); //指定位置插入字符串public void delete(int start); //从开始位置删除剩下的public void delete(int start,int end); //从开始位置删除结束位置-1public void reverse(); //反转public int length(); //返回长度}MyStringBuffer.java
推荐阅读
- aoc红酒 什么意思
- 蚁酸是什么酸 乙酸
- 淀粉水解产物 淀粉水解产物是什么
- 黑眼圈是什么梗 黑眼圈的梗
- 四个木字叠起来读什么 四个木是什么字
- 月亮有阴晴圆缺是什么现象引起的 月亮有阴晴圆缺是怎么引起的
- 瓦斯是什么 瓦斯是什么东西
- 结婚9周年是什么婚 结婚9周年又叫什么
- 上巳节是哪天 上巳节是什么时候
- 生育津贴怎么算 生育保险什么意思