本帖最后由 似水像火 于 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的栈内存都是指向同一个堆内存地址。求指教...
|
|