public test(int []data){
  data = new int[6];
}int[]data = null;
this.test(data);想知道为什么执行后data仍然为NULL,目前DATA地址不是已经指向一块新的内存了吗,
还是传进的只是地址的一个副本值?

解决方案 »

  1.   

    data是局部变量 与外面没有关系
      

  2.   

    这是 JAVA 的传值引用中最蹊跷的问题之一,楼主的代码是达不到目的的。public test(int []data){
      // 在这里修改 data
    }int[]data = new int[6];
    this.test(data);这样是可以达到目的的,为什么呢?在public test(int []data){
      data = new int[6];
    }这个调用中,并未更改参数 data 所引用的对象的内容,而只是将 data 中包含的值做了更改。引用类型的变量中包含的值是一个整型值,即一个地址而已。
      

  3.   

    关于按引用调用的问题
    看到标题近来了,只是想说一声java是按植传递的
      

  4.   

    我得理解不知道有没有错
    data是个值
    只不过这个值存的是一个地址
    即数组存放得地址
    函数调用得时候new了一个数组
    并把数组得地址赋值给了data
    data得值确实已经改变
    但由于函数调用使用堆栈得原因
    调用的时候data进栈,进栈时值为null
    new一个数组时data值改变,不为null了
    但调用完成时data出栈又用null覆盖掉了改变得data值
      

  5.   

    看来虽然说是按引用调用,但传入的只是地址值的一个副本,虽然副本指向了新的空间,但实际地址并没有改变指向。
    如果是按通常一样修改内存中的内容(比如排序 bubblesort(int []data)),是可以做到的,因为通过地址副本值,我们能够找到实际内存中内容并加以修改。
    我这样理解应该没有错吧:) 谢谢大家了。