数组详解
```java`/*
数组:[–>代表对象是数组类型
I-->代表当前区域对象身上代表的元素类型(元素类型是int类型)
@-->代表的是后面是具体的地址
659e0bfd-->哈希码值十六进制的表现形式
综合在一起 [I@659e0bfd-->整数数组的内存地址值--在内存中唯一确定的值
索引:Java为了保证数组中的元素的唯一性,自动进行标号(编号或者索引index-->从零开始)Java为了保证数组中的元素的唯一性
唯一确定数组中的元素方式--->数组的内存地址+元素的下标--》数组名[下标]
数组的定义:
数组类型[] 数组名=new 数据类型[]{元素值1,元素值2.....};
int []arr=new int[]{1,2,3};-->数组的元素值确定了数组额长度
防止钻空子[]中什么值都不能进行
new关键字:
int []arr1[];arr1={3,4,5};-->进行报错,没有开辟内存空间,无法元素
作用:在内存中开辟内存空间进行存储,在堆里面进行开辟空间
int []arr={1,2,3};底层默认开辟空间
系统默认初始值:系统默认初始值优先于程序初始值
基本数据类型:
/*(byte、short、int-->0)、(char--'\u0000' \u-->代表以u16进行的编码)
(long-->0L)、(float--0.0F)、(double--0.0)、(boolean-->false)*/
/*引用数据类型:Java中的所有引用数据类型系统默认值都是null
java内存:
栈:存储的是局部变量,当存储内容使用完毕会被立即清除,存储的java的计算过程
堆:存储的是对象,当存储内容使用完毕之后等到某个时刻进行回收
方法区:(静态资源,类的信息,方法,属性)
本地方法栈(不讲)
寄存器(程序计算器)(不讲)
三个数组的共享:
两个引用指向同一个堆内存--》共享
int[] arr2=arr1;
*/
class ArrayDemo1{
public static void main(String[] args){
/**int [] arr=new int[3];
arr[0]=10;
//声明
int []arr1;
//初始化
arr1=new int[5];
System.out.println(arr);
System.out.println(arr[0]);
System.out.println("---------------------")
*///方式1
//int []arr=new int[]{1,2,3};
//方式2
//int []arr=new int[5];
//声明
//int []arr;
//初始化
//arr=new int[]{1,2,3};
//方式3
//int arr[]={1,2,3};
//char[] arr=new char[4];
System.out.println(arr[0]);
//三个数组的共享效果
int[]arr1=new int[3];
arr1[1]=10;
int[]arr2=arr1;
arr2[1]=8;
System.out.println(arr1[1]);
System.out.println(arr2[1]);
}
}`
**数组之间的复制:**
1. 使用System.arraycopeof(arr,0,arr1,srclength,length)---->效率最高,使用系统的复制方式
2. 使用Arrays.copeOf(arr,newlength)---->复制的是新的数组,基于第一种方式,但是缺点在于只能从头开始复制
3. clone()对象的克隆性质,效率最低
4. for循环,跟第二中差不多,效率不高
**数组的空间问题:****挖坑专用**
1. 数组没有开辟空间就不能进行存储数据;没有空间的制约就没有内存分配;
2. arr[2]={3,4,5};//没有开辟空间无法存储数据---二维数组的情况下
3. new---关键字用于开辟空间资源,在堆中进行开辟
4. int []arr={1,2,3};底层默认开辟空间