public class StringTest{
        static  String  s1;       
        publicstatic void main(String[] args) {
           String s2;              
           String s3 = "";      
           System.out.print(s1.isEmpty());     //运行时异常
           System.out.print(s2.isEmpty());     //编译出错
           System.out.print(s3.isEmpty());     //ok!输出true
        }
    }

解决方案 »

  1.   

    文章解释是:
    未初始化、空串""与null。它们是不同的概念。对未初始化的对象操作会被编译器挡在门外;null是一个特殊的初始化值,是一个不指向任何对象的引用,对引用为null的对象操作会在运行时抛出异常NullPointerException; 而空串是长度为0的字符串,和别的字符串的唯一区别就是长度为0。但是s1  s2   是怎么分配的?
    S1  S2  为什么一个为null   一个未初始化???
      

  2.   

    空串分配了空间,但长度为0。 null没有分配空间。但两者都声明了变量名,好比给了一个装地址或值的盒子。
    静态变量在加载的时候已经默认被初始化,String s3 = "";执行main时候被赋值显然也被初始化了。  String s2;既没有默认,也没有手动,所以未初始化。
      

  3.   


    /**
     * <pre>
     *  @author kanpiaoxue
     * 
     * 未初始化、空串""与null。它们是不同的概念。对未初始化的对象操作会被编译器挡在门外;null是一个特殊的初始化值,
     * 是一个不指向任何对象的引用,对引用为null的对象操作会在运行时抛出异常NullPointerException; 
     * 而空串是长度为0的字符串,和别的字符串的唯一区别就是长度为0。
     * 
     * 但是s1  s2   是怎么分配的?
     * S1  S2  为什么一个为null   一个未初始化???
     * </pre>
     */
    public class StringTest {
    /**
     * <pre>
     * s1在 StringTest.class 被JVM加载的时候,就被赋予了 null 值。
     * s1 是 static ,也就是静态的类属性,会在 JVM 加载该类的时候进行初始化,如果没有指定初始化的具体值,将会被赋予默认值:null
     *  
     *  例如:
     *  static int n1; //默认的初始化值: 0
     *  static long n1; //默认的初始化值: 0L
     *  static Date d1; //默认的初始化值: null
     * </pre>
     */
    static String s1; public static void main(String[] args) {
    /**
     * <pre>
     * 这里的 s2 是方法内的局部变量,在Java里面规定,局部变量一定要被“初始化”之后才能引用。局部变量是不会被编译器赋予默认值的。
     * </pre>
     */
    String s2;
    /**
     * <pre>
     * s3 的这个局部变量,很明显被指定了初始化的数值,符合Java的规定,是不会报错的。
     * </pre>
     */
    String s3 = ""; /**
     * <pre>
     * isEmpty() 这个函数,你可以参考一下JDK的源码。可以清晰的看到
     * 
     * public boolean isEmpty() {
     *  return count == 0; 
     * }
     * 
     * 里面的 count,看过JDK的源码之后,知道它是组成String的字节的个数。
     * </pre>
     */
    System.out.print(s1.isEmpty()); // 运行时异常
    System.out.print(s2.isEmpty()); // 编译出错 -- 在现有的Java的IDE里面,这是报错的,提醒你会有编译的错误。
    System.out.print(s3.isEmpty()); // ok!输出true
    }
    }
      

  4.   


    好好看看书,书里面都有。Java最基础的知识哦!努力!