我在写程序是写下如下一段代码:
for(int i=0;i<19;i++)
 Double dou=new Double(i);
在程序编译时居然没出错,对象dou不是被定义了十次吗怎么会不错呢?高手请指教。

解决方案 »

  1.   

    不是定义,更编译无关,而是在开辟了19个Double对象的空间,lz学什么的
      

  2.   

    其实我也不太懂...这是为什么啊?
    如果是 dou=new Double(i); 
    这就懂了,是十个对象.可是前面有
    Double 
    那不就是十个对象声明吗?为什么声明十次却没有错?
      

  3.   

    声明和定义的区别如下:
    在java中如果写成Double double 为声明
    写成Double double  = new Double();为定义
    定义是给变量进行分配了内存,多看看书就知道了。
      

  4.   

    for(int i=0;i <19;i++)
     Double dou=new Double(i);就类似于
    {
        Double dou = new Double(1);
    }
    //运行到这个右大括号时,dou被销毁了,随之new Double(1)所声明的对象也因为没有引用而被jvm当垃圾回收了。{
        Double dou = new Double(2);
    }......
      

  5.   

    Java Language Specification里讲得很清楚,这属于非法的语法。
      

  6.   

    照六楼的思路,当执行完循环后dou就不可能存在有效的引用.但程序运行后dou保留的是最后的对象引用.
      

  7.   

    LZ啊.下次题目写的不用这么霸道,也会有人回答的 呵呵1.
    6楼的思路 我很知道对不对.因为我确实也没见过这么写代码的.
    class A{}
    public class gap {  public static void main(String[] arg){
       A aa=new A();
       A bb=new A();
       System.out.print(aa);
       System.out.print(bb);
      }
    }这种情况 是可以的.  
    2.
    7楼说是非法语句.. 这个比较赞同.
      

  8.   

    由于这个语句是从一个程序上截取的.此语句后还有几条语句和上句在一个循环中.所以在测试时程序运行后dou每个对象的引用被保留下来.本人在八楼发的帖子太断章取义拉,特此纠正一下:
    照六楼的思路,当执行完循环后dou就不可能存在有效的引用.程序运行后dou不会保留最后的对象引用.
      

  9.   

    for(int   i=0;i <19;i++) 
      Double   dou=new   Double(i); 
    循环一次创建一个对象,而且都是局部的,只能再循环里面使用
    下一次循环时上次创建的就被销毁了。。