1、数组和普通对象的引用变量有什么区别
了解什么是数组看这里:java中的数组是什么
对于Java的数组来说,只有类型兼容(即属于同一数据类型体系且遵守优先级由低到高原则),才能将数组引用传递给另一数组引用,但仍然不能改变数组长度(仅仅只是调整数组引用指针的指向)。
了解数组传递看这里:数组如何传递
public class TestArrayLength {
public static void main(String[] args) {
int[] numbers = { 3, 5, 12 };
int[] digits = new int[4];
System.out.println("digits数组长度:" + digits.length);//4
for(int number : numbers) {
System.out.print(number + ",");//3,5,12,
}
System.out.println("");
for(int digit : digits) {
System.out.print(digit + ",");//0,0,0,0,
}
System.out.println("");
digits = numbers;
System.out.println("digits数组长度:" + digits.length);//3
}
}
执行结果如下:
digits数组长度:4
3,5,12,
0,0,0,0,
digits数组长度:3
数组初始化之后在内存中的存储如下图,在堆中有2个新的数组对象,栈中有2个分别指向这两个数组对象的引用变量:
在执行digits = numbers赋值后,虽然看似digits的数组长度看似由4变成3,其实只是numbers和digits指向同一个数组对象而已。
而digits本身失去引用而变成垃圾,等待垃圾回收来回收(但其长度仍然为4)。如图:
了解java垃圾回收看这里:java垃圾回收机制是什么
看这篇文章就能清楚的明白数组在内存中的存储:java数组如何存储在内存中
原文地址:http://blog.csdn.net/ooppookid/article/details/51404629