- ~
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類型。