java 数组纪要

        该文为《疯狂java 突破程序员基本功的16课》读书纪要。

	public void testArrays() throws Exception {
		String[] books = new String[] { "java", "asp", "php", ".net" };
		String[] names = new String[] { "张三", "李四", "王五", "赵老六" };
		String[] ages = new String[] { "和尚", "尼姑" };

		names = books;
		books = ages;

		Assert.assertEquals(names[0], "java");
		Assert.assertEquals(books[0], "和尚");
		Assert.assertEquals(books.length, 2);
		Assert.assertEquals(names.length, 4);
		Assert.assertEquals(ages.length, 2);
		
		// 声明而不初始化数组
		String[] newAges;
		newAges = books;
		Assert.assertEquals(newAges[0], "和尚");
		Assert.assertEquals(newAges.length, 2);
	}

        可得出以下几点:

        1. 将数组B指向数组A,则无论B是如何初始化或者声明的,B的长度和值均与A相同,即B指向了A的内在空间;

        2. 将数据B指向数据A,再将数据A指向数组C,则B指向的还是A的内存,与C无关;

        3. 可仅声明而不初始化一个数组:声明数组,然后将该数组指向另一已经初始化的数组。

对于Java程序中所有的引用变量,它们都不需要经过所谓的初始化操作,需要进行初始化操作的是该引用变量所引用的对象。比如,数组变量不需要进行初始化操作,而数组对象本身需要进行初始化;对象的引用变量也不需要进行初始化,而对象本身才需要进行初始化。

数据执行动态初始化(指定长度而不指定值)时,系统将负责为每个数组元素分配初始值。指定初始值时,系统将按如下规则分配:

        1. byte、short、int和long,初始值是0;

        2. float、double,初始值是0.0;

        3. char,初始值是'\u0000';

        4. boolean,初始值是false;

        5. 其他类型,初始值是null;


        所有局部变量都是放在栈内存中保存的,不管其是基本类型的变量,还是引用类型的变量,都是存储在各自的方法栈区中;但引用类型变量所引用的对象(包括数组、普通Java对象)则总是存储在堆内存中。



你可能感兴趣的:(java 数组纪要)