概述
先总体来介绍一下:
运行速度:StringBuilder > StringBuffer > String
安全方面来说:StringBuffer线程安全,StringBuilder线程不安全
使用情况:操作少量数据String、多线程下操作大量字符串数据StringBuffer、单线程下操作大量数据StringBuilder
至于为什么运行速度StringBuilder最快呢?为什么它又是线程不安全呢?而StringBuffer虽然速度没有它快,但为什么又是线程安全的?
首先呢,StringBuffer是多线程的,里面有很多方法被synchronized修饰,保证了它的安全性。为什么被synchronized关键字修饰后,它就线程安全的了。StringBuffer是单线程的,所以没有被synchronized修饰。
这里就有必要谈一下synchronized这个了。它是线程里面的一个关键字,它可以修饰一个方法或一个代码块,是一个同步锁,用来锁定对象的。目的呢是保证一个线程访问对象的synchronized()代码块时,另一个线程也可以访问非synchronized()同步代码块。
题外话:举两种情况来介绍一下synchronized:
第一种:使用了synchronized
有两个线程对象thread1和thread2,线程1执行的是synchronized修饰synthread1的run()方法,线程2执行是synchronized修饰的synthread2的run()方法,就会有两把锁去锁住这两个对象,两个锁之间互不干扰,保证线程都可以同时执行。
第二种:未使用synchronized
有两个线程去访问同一个代码块时,这时只有一个线程在执行,另一个在阻塞状态。必须等第一个线程执行完后,释放了它的这把锁,第二个线程才能获取得到,从而继续执行。
只是个人的片面理解,还望各位大佬及时指出。
接下来简单介绍一下String及它的常用方法:
String呢,它首先被final修饰的,不能被修改,是字符串常量,一旦被创建就不能被修改。
而StringBuilder 和 StringBuffer是字符串变量,是可以改变的。
public class Test {
public static void main(String[] args) {
String s1 = "你好";
s1=s1+"中国";
System.out.println(s1=="你好中国");
System.out.println(s1);
}
}
运行结果:
false
你好中国
为什么会出现这种情况呢?明明s1打印出来的是 你好中国。
这是因为在 s1=s1+"中国";相当于执行了String s1 = new String(“你好中国”).
String常用方法:
-
length() 字符串的长度
-
charAt()截取一个字符
-
getchars() 截取多个字符并由其他字符接受
-
getBytes() 将字符串变成一个byte数组
-
toCharArray()将字符串变成一个字符数组
-
equals()和equalsIgnoreCase()比较两个字符串是否相等,前者区分是否大小写,后者不区分。返回为true或false
-
startWith() 和endWith() 判断字符串是不是以特定的字符开头或结束。 返回true或false
-
toUpperCase() 和 toLowerCase()将字符串转换为大写或小写。 返回 字符串的大写 或 小写
-
concat()连接两个字符串。 将两个字符连在一起。
-
trim()去掉起始和结束的空格。 去掉前后的空格
-
subString()截取字符串
-
indexOf() 和 lastIndexOf()前者是查找字符或字符串第一次出现的地方,后者是查找字符或者字符串最后一次出现的地方。 返回值, 是 下标
-
compareTo() 和compareToIgnoreCase() 按照字典顺序比较两个字符串的大小。 前者区分大小写,后者不区分
-
replace()替换
你学废了吗?下一期说一下如何在Java的catch块里面处理业务逻辑,也就是抛出异常后,在异常里面如何处理需求。
就用干饭当一个需求,在代码里面进行异常处理。
以上只是个人简单总结及看法,如果不对之处,还望指出,谢谢!
最后
以上就是缥缈火车为你收集整理的Java中String、StringBuffer、StringBuilder常见面试要点的全部内容,希望文章能够帮你解决Java中String、StringBuffer、StringBuilder常见面试要点所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复