-
Notifications
You must be signed in to change notification settings - Fork 778
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
2019-04-08:请简述一下String、StringBuffer和StringBuilder的区别? #22
Comments
1.String 为字符串常量,StringBuffer与StringBuilder字符串变量,从而效率:3.String2.StringBuffer1.StringBuilder(一般情况下); |
String 拼接字符串时每次都会创建新的对象,适合少量拼接使用,速度最慢 |
String 常量,java里面8大数据类型之一,相关知识:常量池 |
有时候东西记得模糊就需要有技巧的猜了,Buffer 在编程语言中多是数据流的意思(同理的还有stream),做完比较细的 Buffer 基本都是数据安全的(基本数据怎么可能都不是线程安全),Builder 一般是建造者,名字比较明显不太可能是线程安全,外加同一个子类有了StringBuffer 是线程安全。 |
String : 是描述一个字符串变量的类,这个对象的字符串是固定的,不可变的,描述一个新的字符串变量需要创建一个新的对象。 |
String 为字符串常量,一旦创建不可以被修改,是线程安全的;String 类使用 final 修饰符,不可以被继承;String 的长度是不变的。适用于少量操作的字符串。 |
StefanShan 回答好全,错过了一天 |
String不可变,StringBuilder/StringBuffer可变,StringBuilder非线程安全,StringBuffer线程安全。建议需要经常改变的字符串使用StringBuilder/StringBuffer。 |
String不能进行字符串拼接 |
在 StringBuilder append 的时候, 可能会涉及扩容, 没错就是用的 java.lang.System#arraycopy; |
这个方法好像不是java了:
|
面试官, 只是想问你, 可能他自己都不知道; |
|
String是不可变类,它是由final修饰的一个类,也不能被继承,是字符串常量 |
String: 被final修饰,不可变,这导致需要延长字符串时需要开辟空间创建新的String(比如:String str = hello,想要给该字符串添加上world时,则会先开辟空间存储world,再开辟空间将两个字符串拼接,也就是说,一个简单的拼接工作,String需要开辟三块空间来完成) StringBuffer: 可变类,线程安全,在多线程中需要对大量数据进行操作时使用,StringBuffer对象存在缓存容量,当字符串的长度不超过缓存容量时不会开辟新的缓存容量,当字符串超过长度超过缓存容量大小时,会自动增加容量。 StringBuilder: 可变类,可直接在原来的基础上拼接(append),不会开辟新的空间来存储,速度更快,线程不安全,单线程操作字符串使用 |
|
No description provided.
The text was updated successfully, but these errors were encountered: