//默认值为啥有的人说有?有的说没有?其实都是对的,请看下面,只是他们没有说全
public class textDay05 {
public static void main(String[] args) {//第一种不算是完整方式,但是结果会怎样呢?
//完整方式://int[] a={0}; //与int[] a=new int[1];效果是一样的。能打印出初始值,其实这才是完整的第一种创建方式
/*int b[];
System.out.println(b); //报错:必须初始化
System.out.println(b[0]);//报错:必须初始化
char[] c;
System.out.println(c);//报错:必须初始化
System.out.println(c[0]);//报错:必须初始化
String[] s;
System.out.println(s);//报错:必须初始化
System.out.println(s[0]);//报错:必须初始化
//此种创建方式数组是没有默认值的,必须初始化才能用。
int[] a={0,4,6};
for(int i:a){
System.err.println(i);
}
*/
//第二种创建数组的方式
/*int[] a=new int[4];
System.err.println(a);//起始地址 [I@7150bd4d
System.err.println(a[0]);//有初始值 0
String[] strings=new String[4];
System.err.println(strings); //起始地址 [Ljava.lang.String;@6bbc4459
System.err.println(strings[0]);//能打印出 null
char[] c=new char[4];
System.err.println(c);//起始地址 4框
System.err.println(c[0]);//有初始值 1框
Boolean[] b=new Boolean[4];
System.err.println(b);//起始地址 [Ljava.lang.Boolean;@152b6651
System.err.println(b[0]);//有初始值 null
*/
//两种方式的联系:
//int[] a={0}; //与int[] a=new int[1];效果是一样的。能打印出初始值,其实这才是完整的第一种创建方式
//扩展:我们知道类中全局变量有初始值。而局部变量没有初始值,而对于数组也实用吗?
// 答:局部数组也是有默认值的
}
}
总结市面上的话:有的人说有默认值,有人说没有。其实按照2种完整创建数组是有默认值的。而说没有的 说的就是我的第一种不完全创建方式
增加内容:
数组的内存空间(引用数据类型的分配)
Int[] arr=new int[4]
第一步:声明数组 Int[]arr 在栈中开辟自己空间,所以没有初始值
第二部:初始化数组 new int[4] 在堆中开辟4个的4字节的内存。并把第一个空间的地址的给到在栈中的arr。