问答题(2014年阿里巴巴公司面试)

说说Java中String、StringBuffer、StringBuilder的主要区别。

答案解析

String与StringBuffer简单地说,就是一个变量和常量的关系。(1) 在String类中没有用来改变已有字符串中的某个字符的方法,所以在JDK文档中称String类的对象是不可改变的。操作中每次对 String 变量的改变实际上是生成了一个新的 String 对象,然后将指针指向新的 String 对象,所以经常改变内容的字符串最好不要用 String ,因为生成对象会对系统性能产生影响,特别当内存中引用对象多了以后, JVM 的 GC 就会开始工作,那速度是一定会相当慢的。(2) StringBuffer类属于一种辅助类,可预先分配指定长度的内存块建立一个字符串缓冲区。这样使用StringBuffer类的append方法追加字符比String使用+操作符添加字符到一个已经存在的字符串后面有效率得多。因为使用 + 操作符每一次将字符添加到一个字符串中去时,字符串对象都需要寻找一个新的内存空间来容纳更大的字符串,这无凝是一个非常消耗时间的操作。添加多个字符也就意味着要一次又一次的对字符串重新分配内存。使用StringBuffer类就避免了这个问题。(3) 在某些特别情况下,String 对象的字符串拼接其实是被 JVM 解释成了 StringBuffer 对象的拼接,所以这些时候 String 对象的速度并不会比 StringBuffer 对象慢:String S1 = “This is only a” + “ simple” + “ test”;StringBuffer Sb = new StringBuilder(“This is only a”).append(“ simple”).append(“ test”);这个时候 StringBuffer 在速度上根本一点都不占优势。其实这是 JVM 的一个把戏,在 JV...

查看完整答案

讨论

结合自己的理解说说什么是多态?Java是如何实现多态的?

在对象流中,对象的传送首先要将所传送的对象串行化,也就是实现Serializable接口。以下代码中必须要实现Serializable接口的类是__________。ObjectInput in=new ObjectInputStream(new FileInputStream("employee. dat"));Employee[] newStaff=(Employee[])in. readObject();

Java中的抽象类Reader和Writer所处理的流是【 】。

在Java中,“目录”被看作是【 】

在Java 中,对象流以____________方法传送和存储。

Java 输入/输出流中包括字节流、____________、文件流、对象流以及管道流。

下列程序的运行结果是 【 】public class test{     private String[] data={“10”,“10.5”};     public void fun(){         double s=0;         for(int i=0;i<3;i++){             try{                 s=s+Integer.parseInt(data[i]);             }catch(Exception e){                 System.out.print(“errorl:”+data[i]);             }         }     }     public static void main(String[] args){         try{             testd=new test();             d.fun();         }catch(Exception e){             System.out.printIn(“error2”);         }     } }

下列代码的执行结果是 【 】public class Test {     public static void main(String[] args){         int[] x={0,1,2,3};         for(int i=0;i<3;i+=2){             try{                 System.out.println(x[i+2]/x[i]+x[i+1]);             }catch(ArithmeticException e){                 System.out.println("error1");             }catch(Exception e){                 System.out.println("error2");             }         }     } }

在oneMethod()方法运行正常的情况下,程序段将输出什么? public void test(){   try{    oneMethod();    System.out.println("condition 1");   }catch(ArrayIndexOutOfBoundsException e){    System.out.println("condition 2");   }catch(Exception e){    System.out.println("condition 3");   }finally{    System.out.println("finally");   } }

Java的类库中提供Throwable类来描述异常,它有Error和 __________ 两个直接子类。