概述
前沿:撰写博客的目的是为了再刷时回顾和进一步完善,其次才是以教为学,所以如果有些博客写的较简陋,是为了保持进度不得已而为之,还请大家多多见谅。
一、字符串
字符串String and 可变字符串序列(StringBuilder/StringBuffer)
1.为什么有字符串?
为了便于理解人类不同语言,而创建的类。
字符串是引用变量类型,由byte[]实现的常量(在JDK1.9前是char[]),所以每次修改就会变成新对象,所以时空效率都低。
-
char[]也是由private和final修饰,意味着不可变且外部不能直接进行操作。
-
字符串设计是不可变的,所以字符串有常量池中保存许多常量对象(常量池在方法区)
-
在常量池中的对象能够被共享
-
2.为什么有StringBuffer?
String是不可变字符串时空效率低,所以需要有可变字符序列。
StringBuffer创建缓存空间,创建一定内存空间便于动态修改,效率相较String有所提升,并且支持多线程(方法有synchronized修饰)。
3.为什么有StringBuilder?
在实际拼接字符串中,往往是按照顺序拼接,很少会出现多线程并发的场景,但StringBuffer创建append方法时为了稳健性,使用了synchronized修饰,调用时先加锁,为了减少加锁时带来的额外性能消耗所以创建StringBuider。
StringBuilder则相较StringBuffer效率更高些,所以一般情况(线程安全情况)下使用时选择它。
4.如何使用StringStringBufferStringBuilder?
StringStringBufferStringBuilder三者共有常用方法:
length(); //获取长度
isEmpty(); //是否为空
charAt(i); //获取字符串中下标为i的字符
substring(i,i+1);//获取字符串中下标[i,i+1)的字符串子串
StringStringBufferStringBuilder三者共有我不熟悉方法:
toCharArray(); //将此字符串转换为一个新的字符数组返回
indexOf(xx);//返回xx字符串第一次出现的下标
toLowerCase/UpperCase();//字符串全变成小/大写
trim();//去除字符串前后空白符
intern();//结果在常量池中共享
StringBufferStringBuilder二者共有常用方法:
StringBuffer sb = new StringBuffer(s1);
//增删改插
append(); // 拼接方法
delete(int start, int end)//删除[start,end)之间字符
setCharAt(int index, xx)//替换[index]位置字符
insert(int index,xx) //在[index]位置插入xx
reverse()//反转
replace(int start, int end, String str)//替换[start,end)范围的字符序列为str
toString() //返回此序列中数据的字符串表示形式
String s1 = new String("字符串"); 与String s1 = "字符串"有区别吗?
-
前面的先在堆中创建对象,再在常量池中创建常量“字符串”;
-
后面的直接在常量池中创建常量“字符串”;
其他知识
结尾
参考文章
最后
以上就是粗犷宝马为你收集整理的Java基础知识 | String/StringBuilder/StringBuffer一、字符串其他知识结尾参考文章的全部内容,希望文章能够帮你解决Java基础知识 | String/StringBuilder/StringBuffer一、字符串其他知识结尾参考文章所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复