String相关知识和面试题

本文详细介绍了Java中String、StringBuffer和StringBuilder的区别。String是不可变对象,每次操作都会创建新对象,而StringBuffer和StringBuilder支持在原对象基础上操作,其中StringBuffer是线程安全的。在单线程环境中推荐使用StringBuilder以提高性能。此外,文章还讨论了字符串常量池和堆内存的分配,以及常见的字符串方法如indexOf、charAt、replace等。

1.Java中操作字符串都有哪些?它们之间有什么区别?

操作字符串的类有:String、StringBuffer、StringBuilder

1.String和StringBuffer、StringBuilder的区别在于String声明的是不可变的对象,每次操作都会生成新的String对象、然后将指针指向新的String对象。而StringBuffer、StringBuilder可以在原有对象的基础上进行操作,所以在经常改变字符串内容的情况下最好不要使用String

2.StringBuffer和StringBuilder最大的区别在于,StringBuffer是线程安全的,而StringBuilder是非线程安全的,但StringBuilder的性能却高于StringBuffer,所以单线程环境下推荐使用StringBuilder,多线程情况下推荐使用StringBuffer

2.String、StringBuffer、StringBuilder区别(类似上一题)

1.数据可变和不可变

1.String底层使用一个不可变的字符数组private final char value[];所以内容不可变

2.StringBuffer和StringBuilder都继承了AbstractStringBuilder,底层使用的是可变字符数组;char[] value;

2.线程安全

StringBuilder是线程不安全的,效率较高;而StringBuffer是线程安全的,效率较低。通过他们的append方法来看,StringBuffer有同步锁,而StringBuilder没有

@Override 
public synchronized StringBuffer append(Object obj) { 		     		
	toStringCache = null;      
	super.append(String.valueOf(obj)); 
    return this; 
}
@Override 
public StringBuilder append(String str) { 
    super.append(str); 
    return this; 
}

3.String str = "i"和String str = new String(“i”)一样吗?

不一样,因为内存分配的方式不一样。String str = "i"的方式,Java虚拟机会将其分配到常量池中,而String str = new String(“i”)则会被分配到堆内存中。


4.String常用的方法有哪些

  1. indexOf() 返回指定字符串的索引
  2. charAt() 返回指定索引处的字符
  3. replace() 字符串替换
  4. trim() 去除字符串两端空白
  5. split() 分割字符串
  6. getBytes() 返回字符串的byte类型数组
  7. length() 返回字符串的byte类型数组
  8. toLowerCase() 将字符串转成小写字母
  9. toUpperCase() 将字符串转成大写字母
  10. subString() 截取字符串
  11. equals() 字符串比较

5.String s = new String(“xyz”),创建了几个StringObject?

一个或者两个,当常量池中存在“xyz"时,则只会在堆中创建new String(“xyz”)这一个,否则在给s = ”xyz"赋值的时候,会在常量池中创建一个xyz的对象。


6.下面这条语句一共创建了几个对象:String s = “a”+“b”+“c”+“d”

一个,因为编译器会对代码进行优化,相当于直接定义了一个"abcd"字符串

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值