A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黄杨 中级黑马   /  2013-3-23 18:25  /  1536 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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-24 07:32

评分

参与人数 1技术分 +1 收起 理由
贾文泽 + 1

查看全部评分

3 个回复

倒序浏览
java中只有值传递,m(x,y);这句只是把x的值赋给number,y的值赋给numbers

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

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

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报

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中的操作即为操作了主函数分配空间的结果!

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 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, 下载次数: 40)

java值传递.jpg

评分

参与人数 1技术分 +2 收起 理由
黄玉昆 + 2

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马