JAVA 数组,
分享于 点击 38213 次 点评:209
JAVA 数组,
/**
*
* @author long
*
*/
public class Array01 {
/**
* 不要同时使用静态初始化和动态初始化。<br>
* 也就是说,不要再进行数组初始化时,既指定数组的长度,也为每个数组分配初始值<br>
* java的数组是静态的,一旦为数组初始化完成,数组元素的内存空间分配结束,程序只能改变数组元素的值而无法改变数组的长度<br>
* 改变数组的引用会造成数组长度改变的假象 但是真正的数组对象的长度并没有改变
*
* 数组元素的默认值<br>
* (byte,short,int,long):0 (float,double):0.0 (char):'\u0000'
* (boolean):false 引用类型:null
*
* 注意考虑数组变量的内存分配(栈内存和对内存)
*/
public void test1() {
final String[] books = new String[] { "疯狂java讲义", "轻量级java ee",
"疯狂ajax" };
String[] names = new String[] { "孙悟空", "猪八戒", "白骨精", "test" };
final String[] strArr = new String[5];
System.out.println(books.length);
System.out.println(names.length);
System.out.println(strArr.length);
System.out.println("---------------");
names = books;
System.out.println(names[0] + "," + names.length);
}
/**
* 在使用数组之前必须初始化数组对象不是数组变量<br>
* 也就是为该数组对象分配连续的内存空间<br>
* 分清数组变量(通常放在栈中),数组对象(通常放在堆中)
*/
public void test2() {
final int[] num = new int[] { 0, 1, 2, 3, 4 };
int[] price;
price = num;
System.out.println(price.length);
price[0] = 10;
System.out.println(num[0]);
}
/**
* 基本类型数组的初始化 <br>
* 所有局部变量不管是基本类型的变量还是引用类型的变量都是存储在方法栈中<br>
* 但引用类型的所引用的对象不管是数组还是java对象都是存储在堆内存中的
*/
public void test3() {
int[] arrInt;
arrInt = new int[] { 1, 2, 3, 4, 5 };
System.out.println(arrInt.length);
}
public void test4() {
int[] iarr = null;
System.out.println(iarr);
// 空指针
System.out.println(iarr.length);
// 只有引用对象后才不会空指针
iarr = new int[4];
System.out.println(iarr.length);
}
public static void main(final String[] args) {
new Array01().test1();
}
}
class Perso {
int age;
double height;
public Perso() {
}
public Perso(final int age, final double height) {
this.age = age;
this.height = height;
}
public void info() {
System.out.println(age + "," + height);
}
}
public class Array02 {
/**
* 考虑main方法的内存分配<br>
* 结果输出的hashcode相同
*
* 先在方法栈中生成一个变量stu<br>
* 然后又在堆内存中生成两个引用变量stu[0],stu[0]<br>
* 然后再在栈内存中一个引用变量p1堆内存中生成一个Person对象p1指向Person对象<br>
* 最后让stu[0]指向p1所在的内存
*
* @param args
*/
public static void main(final String[] args) {
Perso[] stu;
stu = new Perso[2];
final Perso p1 = new Perso(10, 20);
new Perso(11, 22);
stu[0] = p1;
System.out.println(stu[0].hashCode() + "," + p1.hashCode());
}
}
public class Array03 {
/**
* java允许将多维数组当成1维数组来处理<br>
* 初始化多维数组时候只初始化最左边的维数<br>
* 考虑多维数组的内存分配
*/
public void test1() {
int[][] a;
a = new int[4][];
for (int i = 0; i < a.length; i++) {
System.out.println(a[i]);
}
a[0] = new int[] { 0, 1 };
System.out.println("--------------");
for (int j = 0; j < a[0].length; j++) {
System.out.println(a[0][j]);
}
}
public void test2() {
final Object[][][][] f1 = new Object[3][][][];
f1[1] = new Object[3][][];
f1[1][1] = new Object[3][];
f1[1][1][1] = new Object[] { 0, 1, 2, 3, 4 };
for (int i = 0; i < f1[1][1][1].length; i++) {
System.out.println(f1[1][1][1][i]);
}
}
public void test3() {
final Object[] objArr = new Object[3];
objArr[1] = new Object[2];
final Object[] objArr2 = (Object[]) objArr[1];
objArr2[1] = new Object[3];
}
public static void main(final String[] args) {
new Array03().test1();
}
}
相关文章
- 暂无相关文章
用户点评