黑马程序员技术交流社区

标题: 数组和int类型的疑惑 [打印本页]

作者: 刘胜寒    时间: 2013-3-31 17:08
标题: 数组和int类型的疑惑
本帖最后由 似水像火 于 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的栈内存都是指向同一个堆内存地址。求指教...



作者: 邵震    时间: 2013-3-31 17:11
先占坑 在答题
作者: 殇_心。    时间: 2013-3-31 18:27
本帖最后由 殇_心。 于 2013-3-31 18:29 编辑

路过的酱油^^__^^

作者: yhnan    时间: 2013-3-31 20:07
个人认为是的  因为数组在堆内存中开辟了个空间
栈内存中的change指向arr,并对其进行运算赋值操作等操作,始终堆内存中就只有这么一个数组。再来几个指向它,只要不创新的操作的都是这一个
所以arr[1]的值就变化了


作者: 刘胜寒    时间: 2013-4-3 17:02
罗沤洪 发表于 2013-4-3 16:57
整型数组在内存中开辟了的是连续空间,而且在空间里存放的是数值。但是类的对象在内存中存放的是该对 ...

本题以解决...不用在回答了 ....你就实名认证了...




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