StringBuffer sb=new StringBuffer();
String path=new String(sb);
String[] array=path.split(";");
System.out.println(array);
System.out.println("------------------------");
String path1=null;
String[] array1=path1.split(";");
System.out.println(array1);显示结果如下:[Ljava.lang.String;@35ce36
------------------------
Exception in thread "main" java.lang.NullPointerException
at qiu.teststring.TestSplitNull.main(TestSplitNull.java:11)
打印出的结果array没有报错,正常显示;而array1报错。小弟现在捣鼓不清楚了,还望路过的帮忙看看 

解决方案 »

  1.   

    这跟String没有一毛钱关系String path1=null;
    String[] array1=path1.split(";");
    Object a = null;
    int hashCode = a.hashCode();这两个代码原理是一样一样的
      

  2.   

    path1 是 null , path1.split(";") 怎么可能不报错呢?
      

  3.   

    JAVA平台提供了两个类:String和StringBuffer,它们可以储存和操作字符串,即包含多个字符的字符数据。这个String类提供了数值不可改变的字符串。而这个StringBuffer类提供的字符串进行修改。当你知道字符数据要改变的时候你就可以使用StringBuffer。典型地,你可以使用StringBuffers来动态构造字符数据。
      

  4.   


    第二个我知道肯定会报错,我想知道第一个同样sb是空的,但是赋值给path后就不报错了,为什么?????
      

  5.   


    第一个是path是一个空字符串,不是null。即path=""
    所以可以执行String[] array=path.split(";");空字符串和null是不同的。
      

  6.   

    你null 就等于没实例出来  压根没那东西  你怎么split  肯定报错啊
      

  7.   

    ╮(╯▽╰)╭  对象的实例你都还没分清楚   第一个已经实例了对象  在内存中已经分配了地址引用,开辟了空间 而第二个你直接为null,这个String对象只有声明都还没实例,还没在内存中分配空间给它
    至于String和StringBuffer类的区别  在你这个例子中根本就没有体现。
      

  8.   

    String:固定长度的字符串,如果要发生变化必须重新生成新的实例;字符串常量;不可变的对象
    StringBuffer:字符串变量,每次结果都会对 StringBuffer 对象本身进行操作,而不是生成新的对象,再改变对象引用。线程安全的可变字符序列。一个类似于 String 的字符串缓冲区,但不能修改。虽然在任意时间点上它都包含某种特定的字符序列,但通过某些方法调用可以改变该序列的长度和内容。主要操作是 append 和 insert 方法,可重载这些方法,以接受任意类型的数据。每个方法都能有效地将给定的数据转换成字符串,然后将该字符串的字符追加或插入到字符串缓冲区中。append 方法始终将这些字符添加到缓冲区的末端;而 insert 方法则在指定的点添加字符。
    StringBuilder 字符串变量(非线程安全)一个可变的字符序列是5.0新增的。此类提供一个与 StringBuffer 兼容的 API,但不保证同步。该类被设计用作 StringBuffer 的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)。如果可能,建议优先采用该类,因为在大多数实现中,它比 StringBuffer 要快。两者的方法基本相同。
    注:如果针对某一String用“+”拼接的话,效率比StringBuffer还快,比如:String x="a"+"b";JVM认为x="ab";不过如果是几个不同的String拼接的话就不行了。
      

  9.   

    首先 String 的长度是不变的  例如  String str="123"; str+="456"; 这时str已经是新的实例了 
         而 StringBuffer  的长度是可变的  并且 始终保持同一个对象 而你出现的NullPointException(空指针异常)  那是因为你的path1是null值  这样path1.split 必定会出现空指针异常
      

  10.   

    楼主请看你的代码
    String path1=null;
            String[] array1=path1.split(";");
            System.out.println(array1);你使用了一个为null的对象去调用方法,能不报NullPointerException吗?
      

  11.   

    import java.util.Arrays;
    public class Test {
    public static void main(String args[]){
      StringBuffer sb1 = null;
      StringBuffer sb = new StringBuffer();
      System.out.println("-------"+sb1+"-------");//sb1=null
      System.out.println("-------"+ sb+"-------");//sb=""
      
          String path=new String(sb);
          System.out.println("-------"+path+"-------");//path=""
          String[] array=path.split(";");
          System.out.println(Arrays.toString(array));
    //       String path1=null;
    //       String[] array1=path1.split(";");
    //       System.out.println(array1);
    }
    }
    ///////////////////result////////////////////////
    -------null-------
    --------------
    --------------
    []