本帖最后由 toShareBeauty 于 2013-7-6 21:16 编辑
在命令行里面启动程序,如果不传参数,相当于String[] args = new String[0];new String[0] 也是要在堆内存中给这个数组分配内存的,只是分配的内存不如 new String[1], 这么多。数组中的元素所占用的堆内存只是数组这个对象中成员的一部分,从已经暴露的来看至少数组还有个 length 成员是不。而本程序中 new RandomTest(){{RandomTest.main(null);}}.equals(null) 这个内部局部函数这里,却是在程序中使用类名调用静态函数,这里传的参数是 null,所以和命令行里面启动不传参数不同。这个程序真有点意思,说明了引用类型的形成可以直接传 null,编译也是可以通过的,二是数组类型 new Type[0] 不是 null,三是使用 java 命令在命令行调用一个程序,如果不传参数默认情况下 args = new String[0],四是,java 命令对应 windows 来说也是一个命令,从命令行角度来看” java java程序名 “这个命令中,java 程序名就是参数,只是java命令启动虚拟机的时候,对 java 这个命令的参数处理过了,重新创建的一个 String[counts] 数组,counts 这个变量就是 java程序名后面字符串的个数,五是这里面居然还用了局部内部类来创建对象。 |