1. int a[1000] 与 Integer a[1000]进行操作(例如遍历)时速度是不是一样的?
2. 如果有
   int a; 
   Integer b=(Integer)a;
   以后对b操作为什么不能改变a的值。如果想对b操作改变a的话除了使用Integer a之外还有没有办法?
   (实际情况是:我为了读取文件,使用byte[] a, FileReader的read方法只支持参数类型为byte[]的,不支持参数类型为Byte[]的,而我又想用一些变量“指到”a这个数组的某些元素上,不知道如何解决。)
3. Java对于数组类型是如何处理的?即如果有如下的函数
   int func() {
       int c[10];
       return c[0];
   }
   返回的应该是值。(基本类型),但
   int[] func() {
       int c[10];
       return c;
   }
   返回的应该为什么是这个数组的引用呢?
由于刚开始学Java, 之前全是用C++,因而不太明白Java的做法。恳请大家给我一些提示。谢谢。

解决方案 »

  1.   

    1、Integer 是一个类,int 是编译器直接支持的类型,操作时当然是 int 快。2、int a 在线程的栈上,Integer b 是一个对象,在堆中,也就是说根本不在一个地方。另外 Integer b 的值是不能够改变的,你对它赋一个新值,实际上是在堆中创建了另一个新的Integer对象,而原来的值就成为垃圾了。你修改 byte[] a 的元素,就必须传递整个数组,除此之外没有其他办法。3、JAVA 中只有传值,如果参数/返回值是对象,那么传递的只是地址。数组是对象。
      

  2.   

    1.不一样,因为对象是在堆中~~所以Integer 对象慢
    2.你要读文件可以用BufferedReader b  = new BufferedReader (new FileReader("文件名"));
    用b.readLine();可以一行一行的读`~
    3.这和c++差不多的~~数组名就是数组的首地址撒
       int func() {
           int c[10];
           return c[0];
       }
    c[0]是个int型的值
    而c就是个对数组的引用撒
      

  3.   

    谢谢回答。
    通过3,是不是说其实数组也是一个对象,从Object派生出来的,Java在处理的时候把它当作了对象,因而return c才能返回一个引用。
    那么这是个什么对象呢?(class name?)这个对象里边能够存放什么类型的数据呢?(基本型还是必须要对象?)
    因为有了Autoboxing,很多东西就很模糊了。