具体怎么实现的不清楚,不过如果从c的机制来理解的话还是不一样的,因为在你写了int x;之后系统不但分配空间给这个变量使用,同时也初始化这个变量成0(在c里面不初始化),然后你更改x的值为10。也就是说系统要初始化一次,更改一次。而如果你直接写int x = 10的话,只初始化一次就ok了。如果java虚拟机或者编译器是用c实现的话我想效率就不同了^_^

解决方案 »

  1.   

    如果用第二种可以在使用的时候再初始化,这样使用比较方便吧,一开始定义好变量,使用的时候再初始化,另外,如果像用ArrayList al;
    al = new ArrayList();--使用时再赋值就不用怕已经存数据,忘记的问题了,al肯定是空的了
      

  2.   

    class Test
    {
    Test()
    {
    int x=10;

    int y;
    y=10;
    }
    };对应的操作指令如下:class Test extends java.lang.Object{
    Test();
      Code:
       0:   aload_0
       1:   invokespecial   #1; //Method java/lang/Object."<init>":()V
       4:   bipush  10
       6:   istore_1
       7:   bipush  10
       9:   istore_2
       10:  return}所以可以看出在java中这两种声明方法是完全一样的
      

  3.   

    int x=10
    先生成常量10,然后把10push到stack去,最后把stack的10保存到本地变量int x,x=10先将10push到stack,然后保存到x其实差不多
      

  4.   

    在java中是等效的
    呵呵
    的确有点不一样就是编译