Spring常见面试题(String、StringBuffer和StringBuilder)

本文详细介绍了Java中用于操作字符串的三种主要类:String、StringBuffer和StringBuilder。对比了它们之间的区别,包括性能特点和线程安全性,并解释了String对象与StringBuffer及StringBuilder对象在内存分配上的不同。

1、 java 中操作字符串都有哪些类?它们之间有什么区别?
操作字符串的类有:String、StringBuffer、StringBuilder。
String 和 StringBuffer、StringBuilder 的区别在于 String 声明的是不可变的对象(final修饰),每次操作都会new String() ,然后将指针指向该对象,而 StringBuffer、StringBuilder 可以在原有对象的基础上进行操作,所以在经常改变字符串内容的情况下不建议使用 String。

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

2、String str="ab"与 String str=new String("ab")一样吗?
不一样,因为内存的分配方式不一样
String str="ab"的方式,JVM会将其分配到常量池中;
String str=new String("ab")则会被分到堆内存中。

public static void main(String[] args) {
		String str1 = "ab";
		String str2 = new String("ab");
		System.err.println(str1 == str2); // fasle
		System.err.println(str1.equals(str2)); // true

		/**
		 * PS:==和equals的区别
		 * 1)==比较的是值是否相等
		 * 
		 * 作用于基本数据类型的变量,则直接比较其存储的 “值”是否相等;
		 * 
		 * 作用于引用类型的变量,则比较的是所指向的对象的地址是否想等;
		 * 
		 * 2)equals方法
		 * equals方法不能作用于基本数据类型的变量,继承自Object类,比较的是是否是同一个对象
		 * 
		 * 如果没有对equals方法进行重写,则比较的是引用类型的变量所指向的对象的地址;
		 * 
		 * 诸如String、Date等类对equals方法进行了重写的话,比较的是所指向的对象的内容。
		 */
	}

3、为什么StringBuffer strBu = " "和StringBuilder strDe = " "报错?

很多人用习惯了String,再用StringBuffer或者StringBuilder的时候,都会按照String初始化的习惯来,String str="ab"之所以不报错,是因为Jvm会将该值存在字符串常量池中(编译阶段就会在内存中创建),而new String("cd")是放在堆中(运行时才会在堆中创建对象),所以String不需要new 对象就可以直接赋值,而StringBuffer和StringBuilder不先new 对象就直接赋值,自然是行不通的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值