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

浏览: 115 发布日期: 2018-01-01 分类: java

叨叨两句

  1. ~

牛客网——java专项练习067

1

java中,StringBuilder和StringBuffer的区别,下面说法错误的是?
正确答案: C

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

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

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类型。
返回顶部