- ~
java中,StringBuilder和StringBuffer的区别,下面说法错误的是?
正确答案: C java
A StringBuffer是线程安全的
B StringBuilder是非线程安全的
C StringBuffer对 String 类型进行改变的时候其实都等同于生成了一个新的 D String 对象,而后将指针指向新的 String 对象。
D 效率比较String<StringBuffer<StringBuilder,可是在 String S1 = “This is only a” + “ simple” + “ test”时,String效率最高安全
效率:StringString(大姐,出生于JDK1.0时代) 不可变字符序列 <StringBuffer(二姐,出生于JDK1.0时代) 线程安全的可变字符序列 <StringBuilder(小妹,出生于JDK1.5时代) 非线程安全的可变字符序列 。Java中的String是一个类,而并不是基本数据类型。string是值传入,不是引用传入。 StringBuffer和StringBuilder能够算是双胞胎了,这二者的方法没有很大区别。但在线程安全性方面,StringBuffer容许多线程进行字符操做。 这是由于在源代码中StringBuffer的不少方法都被关键字 synchronized 修饰了,而StringBuilder没有。 StringBuilder的效率比StringBuffer稍高,若是不考虑线程安全,StringBuilder应该是首选。另外,JVM运行程序主要的时间耗费是在建立对象和回收对象上。
说明输出结果。多线程
package test; import java.util.Date; public class SuperTest extends Date{ private static final long serialVersionUID = 1L; private void test(){ System.out.println(super.getClass().getName()); } public static void main(String[]args){ new SuperTest().test(); } }
正确答案: C ui
A SuperTest
B SuperTest.class
C test.SuperTest
D test.SuperTest.class线程
TestSuper和Date的getClass都没有重写,他们都是调用Object的getClass,而Object的getClass做用是返回的是运行时的类的名字。这个运行时的类就是当前类,因此 super.getClass().getName() 返回的是test.SuperTest,与Date类无关 要返回Date类的名字须要写super.getClass().getSuperclass()
1.首先 super.getClass() 是父类的getClass()方法,其父类是Date,它的getClass()方法是继承自Object类并且没有重写, 因此就是调用object的getClass()方法。而看一下getclass的方法解释以下图 因此能够知道是返回当前运行时的类。 2.在调用getName()方法而getName()是:包名+类名
针对如下代码,哪些选项执行后是true的:()指针
class CompareReference{ public static void main(String [] args){ float f=42.0f; float f1[]=new float[2]; float f2[]=new float[2]; float[] f3=f1; long x=42; f1[0]=42.0f; } }
正确答案: B C code
A f1==f2
B x==f1[0]
C f1==f3
D f2==f1[1]对象
BC正确,选项B解释,java核心卷I中43页有以下表述:两个数值进行二元操做时,会有以下的转换操做: 若是两个操做数其中有一个是double类型,另外一个操做就会转换为double类型。 不然,若是其中一个操做数是float类型,另外一个将会转换为float类型。 不然,若是其中一个操做数是long类型,另外一个会转换为long类型。 不然,两个操做数都转换为int类型。 故,x==f1[0]中,x将会转换为float类型。