【329天】我爱刷题系列088(2017.12.31)

叨叨两句

  1. ~

牛客网——java专项练习067

1

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运行程序主要的时间耗费是在建立对象和回收对象上。

2

说明输出结果。多线程

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()是:包名+类名

3

针对如下代码,哪些选项执行后是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类型。