
文章插图
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***= new StringBuffer(str1); //根据str1创建一个StringBuffer对象*** .append("be light"); //在最后追加System.out.println( *** );*** .delete(4, 10);//删除4-10之间的字符System.out.println( *** );*** .insert(4, "there ");//在4这个位置插入 thereSystem.out.println( *** );*** .reverse(); //反转System.out.println( *** );}}
长度 容量为什么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***= new StringBuffer(str1);System.out.println( *** .length()); //内容长度System.out.println( *** .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***= new StringBuffer();for (int i=0;i<10000;i++){*** .append('a');}long end2 = System.currentTimeMillis();System.out.println("stringbuffer总共耗时了:"+(end2-start2));}

文章插图
//java学习交流:737251827 进入可领取学习资源及对十年开发经验大佬提问,免费解答!
练习-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
package character;public class MyStringBuffer implements IStringBuffer{}9.10 MyStringBuffer
具体文字说明:how2j.cn/k/number-st…
package digit;public class MyStringBuffer implements IStringBuffer{int capacity = 19;int length = 0;char []value;// 无参构造 ***public MyStringBuffer(){value = https://www.juguize.com/b/new char[capacity];}// 带参数构造 ***public MyStringBuffer(String str){this();if (null == str)return;if(capacity < str.length()){capacity = value.length * 2;value = new char[capacity];}if (capacity >= str.length()){System.arraycopy(str.toCharArray(),0,value,0,str.length());}length = str.length();}//追加字符串@Overridepublic void append(String str){insert(length,str);}//追加字符@Overridepublic void append(char c){append(String.valueOf(c));}//指定位置插入字符@Overridepublic void insert(int pos,char b){insert(pos,String.valueOf(b));}//指定位置插入字符串@Overridepublic void insert(int pos,String b){//边界条件判断if (pos
推荐阅读
- 錾刻 錾
- 瓦肆是什么意思 瓦斯是什么
- Columbia是什么牌子的刀 columbia是什么牌子
- 豆豉酱,豆瓣
- 天然气锅炉显示e9是什么意思 天然气显示e9是什么意思
- cover什么意思,cover
- 运营商锁
- 畜的动物是什么 牲畜是指哪些动物?
- 东京奥运会首金是什么 东京奥运会首金是哪个国家拿走了??
- 淀粉是什么原料做成的 淀粉是什么做的?