1. JDK中那些类是不能继承的

    不能继承的类是那些用final关键字修饰的类。一般比较基本的类型或防止扩展类无意间破坏原来方法的实现的类型都应该是final的,jdk中System,String,StringBuffer,StringBuilder等都是基本类型。

 

2. String是最基本的数据类型吗?

    基本数据类型包括byte、int、char、long、float、double、boolean和short。

    java.lang.String类是final类型的,因此不可以继承这个类,不能修改这个类。为了提高效率节省空间,我们应该用StringBuffer类。

 

3. 是否可以继承String类?

    String类是final类故不可以继承。

 

4. String s= new String("xyz");创建了几个String Object?二者之间有什么区别?

    两个或一个,“xyz”对应一个对象,这个对象放在字符串常量缓冲区,常量“xyz”不管出现多少遍,都是缓冲区中的那一个。New String每写一遍,就创建一个新的对象,它一句那个常量"xyz"对象的内容来创建出一个新String对象。如果以前就用过"xyz",这句代表就不会创建"xyz"自己了,直接从缓冲区拿。

 

5. String 和StringBuffer的区别:

    JAVA平台提供了两个类:String和StringBuffer,它们可以存储和操作字符串,即包含多个字符的字符数据。String类表示内容不可改变的字符串。而StringBuffer类表示内容可以被修改的字符串。当你知道字符数据要改变的时候你就可以使用StringBuffer。典型的,你可以使用StringBuffer来动态构造字符数据。另外,String实现了equals方法,new String("abc").equals(new Sttring("abc"))的结果为true,而StringBuffer没有实现equals方法,所以,new StringBuffer("abc").equals(new StringBuffer("abc"))的结果为false。

    String覆盖了equals方法和hashCode方法,而StringBuffer没有覆盖equals方法和hashCode方法,所以,将StringBuffer对象存储进java集合中时会出现问题。

 

6. StringBuffer与StringBuilder的区别:

    StringBuffer和StringBuilder类都标示内容可以被修改的字符串,StringBuilder是线程不安全的,运行效率高,如果一个字符串变量是在方法里面定义,这种情况只可能有一个线程访问它,不存在不安全的因素了,则用StringBuilder。如果要在类里面定义成员变量,并且这个类的实例对象会在多线程环境下使用,那么最好用StringBuffer。

 

7. 数组有没有length()这个方法?String有没有length()这个方法?

    数组没有length()这个方法,有length属性。String有length()这个方法。

 

8. 下面这条语句一共创建了多少个对象:String s="a"+"b"+"c"+"d";

     对于如下代码:

String s1="a";
     String s2=s1+"b";
     String s3="a"+"b";
     System.out.println(a2=="ab");
     System.out.println(s3=="ab");

     第一条语句打印的结果为false,第二条语句打印的结果为true,这说明javac编译可以对字符串常量直接相加的表达式进行优化,不必要等到运行期去进行加法运算处理,而是在编译时去掉其中的加号,直接将其编译成一个这些常量相连的结果。

      题目中的第一行代码被编译器在编译时优化后,相当于直接定义了一个"abcd"的字符串,所以,上面的代码应该只创建了一个String对象。