题目
下面关于字符串的描述正确的是:【多选】( )
A.通过String s1=new String("abc")和String s2="abc",则s1==s2为true。
B."abc"+"def"则会创建三个字符串对象,第三个是"abcdef"。也就是说,在Java中对字符串的一切操作,都会产生一个新的字符串对象
C.StringBuffer是线程安全的,它比String快。
D.StringBuilder是线程安全的,它比String快
感人,这个类型我终于做对了
执行速度比较:
完美避开正确答案!!
1、三者执行速度:StringBuilder > StringBuffer > String ; 2、StringBuilder:线程非安全的; 3、StringBuffer:线程安全的; 4、用String操作字符串时,实际上是在不断地创建新对象,而原来的对象会作为垃圾被回收; 对于A: s1利用new 操作后,为该对象在堆(Heap)区分配了一块内存; s2是字符串常量,存放在内存的”文字常量区“ ;虽然两个对象的值相同,但由于两者位于不同的地址,不是相同的对象,因此 s1==s2 为false。 A错
1. Java中对字符串的操作,都会产生一个新的字符串
AD
A 错误
由于s1是new出的新对象,存储在heap中,s2指向的对象 存储在String Pool中,他们肯定不是同一个对象,只是存储的字符串值相同。
B 正确
由于通过new String("abc")和"abc"都会创建一个字符串对象。"abc"+"def"会创建三个字符串对象,第一个是"abc",第二个是"def",第三个则是"abcdef",也就是说在Java中对字符串的一切操作都会产生一个新的字符串。
C正确
D错误
String 字符串常量,StringBuffer 字符串变量(线程安全),StringBuilder 字符串变量(非线程安全);
在大部分情况下 StringBuffer要快于String,StringBuilder比 StringBuffer 要快。