总是见到
JTextField time=null;
time=new JTextField();和JTextField time;
time=new JTextField();有什么区别吗?
当然JTextField是定义在构造函数前面的..

解决方案 »

  1.   

    逻辑上没区别,但是有的编译器如果你不加=null的话,会说你没对变量初始化,不让通过的
      

  2.   

    请注意,如果变量是class instance既定义在class内的变量,那么加不加 = null是没区别的,因为class instance会在new的时候自动赋予初始值,数字会自动归零,boolean是false,char是'\u0000',对象变量自动赋予null。但是如果是局部变量,jvm不会自动为局部变量进行初始化,如果出现了一下代码,编译就会报错,说变量尚未初始化:public static void main(String[] args) {
        String str;
        str.toString();
    }请注意,只有局部变量有这个问题,这个时候str既不是 null,也不是空字符串,它是一个什么也不是的东西,所以可以被编译器检测出来,这样的写法是错误的。但你可以通过给str赋值的方法欺骗编译器。
    public static void main(String[] args) {
        String str = null;
        str.toString();
    }虽然str=null,下面会出现NullPointerException,但是编译器看到赋值语句,以为你已经进行了数据初始化,所以就让代码通过编译了。NullPointerException这个异常是运行期间才会出现的,静态编译无法检测这些东西。
      

  3.   

    我说的这些东西在java教程里都可以看到,请同志们读书的时候仔细一些。
      

  4.   

    全局变量不用初始化,比如String str;jvm会默认初始化为“”,如果int就自动初始化为0等等,
    局部变量必须事先初始化。JTextField time=null; 
    time=new JTextField(); 

    JTextField time; 
    time=new JTextField(); 
    的区别就是底下的没初始化,其余的看上面的就成了
      

  5.   

    String str属于对象,默认初始化是null,不是""这样的空字符串。