首先看下面的代码:
package com.heima.vo;
public class Test
{
public static void main(String[] args) {
int array1 []=new int[]{1,2};//标记1
int array2 []=array1;//标记2
array2[1]=100;//标记3
System.out.println("array1[1]="+array1[1]);//标记4
}
}
如果执行了上面的代码会输出什么?array1[1]=2还是array1[1]=100?
原因:当代码执行到标记1的时候,array1处于栈空间中,new出来的数组存在于堆空间中;array1引用了new出来的数组的内存地址。
当代码执行到标记2的时候,array2处于栈空间中,array2也引用了new出来的数组的内存地址,即array1和array2均引用了new出来的数组的内存地址,至此出现了多个数组类型的变量“引用”同一个数组对象。
当代码执行到标记3的时候,堆空间中数组对象的第二个元素开始变为100。
当代码执行到标记4的时候,由于两个变量引用同一个数组对象所以结果为array1[1]=100。