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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 刘胜寒 金牌黑马   /  2013-3-31 17:08  /  1805 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 似水像火 于 2013-3-31 17:15 编辑

先看两个小程序:
  1. public static void main(String[] args)
  2. {
  3.         int a=4,b=5;
  4.         change(a,b);
  5.         System.out.println(“a=”+a+”,b=”+b);
  6. }

  7. public static void change(int a,int b)
  8. {
  9.         b+=a;
  10.         a++;
  11. System.out.println(“a=”+a+”,b=”+b);

  12. }
复制代码
输出结果:
a=5,b=9
a=4,b=5
  1. public static void main(String[] args)
  2. {
  3.         int[] arr = new int[]{2,3,4,5};
  4.         change(arr);
  5.         System.out.println(arr[1]);
  6. }

  7. public static void change(int[] arr)
  8. {
  9.         for(int i=0;i<arr.length;i++)
  10. {
  11.         if(i%2==1)
  12.         {
  13.                 arr[i]+=2;
  14. }
  15. }
  16. }
复制代码
输出结果:5
为什么int数组的值改变了...是不是因为int数组在栈内存的地址指向堆内存的地址,所以chang()调用的时候,操作了数组内的元素值,使其改变...
类似于
  1. class Yes
  2. {
  3.         public int value;
  4. }
  5. public class Main
  6. {
  7.         public static void main(String[] args)
  8.         {
  9.                 Yes  T1 = new Yes();
  10.                 T1.value = 2;
  11.                 Yes  T2 = T1;
  12.                 T2.value = 3;
  13.                 System.out.println(T1.value);
  14.         }

  15. }
复制代码
当你改变T2的value值时,其实就是改变T1.value的值一样。
因为T1和T2的栈内存都是指向同一个堆内存地址。求指教...


4 个回复

倒序浏览
先占坑 在答题
回复 使用道具 举报
本帖最后由 殇_心。 于 2013-3-31 18:29 编辑

路过的酱油^^__^^
回复 使用道具 举报
个人认为是的  因为数组在堆内存中开辟了个空间
栈内存中的change指向arr,并对其进行运算赋值操作等操作,始终堆内存中就只有这么一个数组。再来几个指向它,只要不创新的操作的都是这一个
所以arr[1]的值就变化了

回复 使用道具 举报
罗沤洪 发表于 2013-4-3 16:57
整型数组在内存中开辟了的是连续空间,而且在空间里存放的是数值。但是类的对象在内存中存放的是该对 ...

本题以解决...不用在回答了 ....你就实名认证了...
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马