黑马程序员技术交流社区
标题:
数组和int类型的疑惑
[打印本页]
作者:
刘胜寒
时间:
2013-3-31 17:08
标题:
数组和int类型的疑惑
本帖最后由 似水像火 于 2013-3-31 17:15 编辑
先看两个小程序:
public static void main(String[] args)
{
int a=4,b=5;
change(a,b);
System.out.println(“a=”+a+”,b=”+b);
}
public static void change(int a,int b)
{
b+=a;
a++;
System.out.println(“a=”+a+”,b=”+b);
}
复制代码
输出结果:
a=5,b=9
a=4,b=5
public static void main(String[] args)
{
int[] arr = new int[]{2,3,4,5};
change(arr);
System.out.println(arr[1]);
}
public static void change(int[] arr)
{
for(int i=0;i<arr.length;i++)
{
if(i%2==1)
{
arr[i]+=2;
}
}
}
复制代码
输出结果:5
为什么int数组的值改变了...是不是因为int数组在栈内存的地址指向堆内存的地址,所以chang()调用的时候,操作了数组内的元素值,使其改变...
类似于
class Yes
{
public int value;
}
public class Main
{
public static void main(String[] args)
{
Yes T1 = new Yes();
T1.value = 2;
Yes T2 = T1;
T2.value = 3;
System.out.println(T1.value);
}
}
复制代码
当你改变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