黑马程序员技术交流社区

标题: java問題 [打印本页]

作者: 黄杨    时间: 2013-3-23 18:25
标题: java問題
public class Test{
  public static void main(String[] args){
     int x = 8;
     int y[] = new int[5];
     m(x,y);
     System.out.println("x is  " + x);
     System.out.println("y[0] is  " + y[0]);
   }
  
     public static void m(int number, int numbers[]){
     number = 168;
     numbers[0] = 888;
    }
  }


我想問的是为什么x输出的还是1,而输出的y[0]是赋过值的?



作者: 魏福伟    时间: 2013-3-23 18:46
java中只有值传递,m(x,y);这句只是把x的值赋给number,y的值赋给numbers

对于基本数据类型在方法调用上,方法中的值(number)改变,不会影响主函数中(x)的值

对于数组是把堆上的地址赋给了numbers,y和numbers指向堆上的同一个地址,numbers[0]的值改变就是y[0]的值改变,效果一样

作者: strawberry2013    时间: 2013-3-23 18:53

public class Test{
  public static void main(String[] args){
     int x = 8;
     int y[] = new int[5];
     m(x,y);
     System.out.println("x is  " + x);
     System.out.println("y[0] is  " + y[0]);
   }
  
     public static void m(int number, int numbers[]){
     number = 168;
     numbers[0] = 888;
    }
  }

num 在函数m中是局部变量,输出值当然不是内部函数操作的结果
而numbers[] 并没有在内存分配空间,实际上在函数m中的操作即为操作了主函数分配空间的结果!

作者: Dev_Lzf    时间: 2013-3-23 19:54
本帖最后由 Dev_Lzf 于 2013-3-23 19:58 编辑
系统管理员 发表于 2013-3-23 18:46
java中只有值传递,m(x,y);这句只是把x的值赋给number,y的值赋给numbers

对于基本数据类型在方法调用上, ...

正解,俺画了个图,让你更好理解吧

java值传递.jpg (44.55 KB, 下载次数: 34)

java值传递.jpg





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2