Java中String、StringBuffer、StringBuilder常见面试要点

先总体来介绍一下:

运行速度: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常用方法:

  1. length() 字符串的长度

  2. charAt()截取一个字符

  3. getchars() 截取多个字符并由其他字符接受

  4. getBytes() 将字符串变成一个byte数组

  5. toCharArray()将字符串变成一个字符数组

  6. equals()和equalsIgnoreCase()比较两个字符串是否相等,前者区分是否大小写,后者不区分。返回为true或false

  7. startWith() 和endWith()  判断字符串是不是以特定的字符开头或结束。  返回true或false

  8.  toUpperCase() 和 toLowerCase()将字符串转换为大写或小写。 返回 字符串的大写 或 小写

  9.  concat()连接两个字符串。   将两个字符连在一起。 

  10. trim()去掉起始和结束的空格。    去掉前后的空格    

  11. subString()截取字符串

  12. indexOf() 和 lastIndexOf()前者是查找字符或字符串第一次出现的地方,后者是查找字符或者字符串最后一次出现的地方。  返回值, 是 下标

  13. compareTo()  和compareToIgnoreCase() 按照字典顺序比较两个字符串的大小。  前者区分大小写,后者不区分

  14. replace()替换

你学废了吗?下一期说一下如何在Java的catch块里面处理业务逻辑,也就是抛出异常后,在异常里面如何处理需求。

就用干饭当一个需求,在代码里面进行异常处理。

                                                                                       以上只是个人简单总结及看法,如果不对之处,还望指出,谢谢!

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值