数组:数组是一种数据结构,用来存储通哪一类型值的集合。通过整形下标可以访问数组中的每一个值。
(1)java中两种数据:primitive(原始类型)和 Object(引用类型)。
(2)数组属于Object,需要new来创建数组,在使用之前一定要开辟空间(实例化)
(3)java数组的特征:1、数组必须经过初始化才能使用
2、一旦创建了数组就不能再改变它的大小
3、(若没有指定初始值)创建一个数字数组时,所有元素都初始化为0;boolean数组的元素会初始化为 false;对象数组的元素则初始化为一个特殊值null(表示这些元素还未存放任何对象)。
4、可以通过arrays.length获得数组中的元素个数。如下
for (int i=0;i
数组的初始化方式:
1、静态初始化: int[] arr1=new int[] {1,2,3,4,5,6}; 或 int[] arr1={1,2,3,4,5,6};
2、动态初始化(声明并开辟数组):int[] arr2=new int[6]; //创建一个可以容纳6个元素的数组
int[] arr3=null;
arr3=new int[6]; // 另一种开辟模式:分步进行数组实例化
一、深浅拷贝:通俗一点来讲就是B复制了A,改变A看B是否变化,如果B跟着变了,则为浅拷贝,反之深拷贝。
在深入理解深浅拷贝之前,得先理解基本数据类型和引用数据类型的存储方式
1> 基本数据类型的存储方式,名值存放在栈内存中,例如int a=1;
当b=a进行复制时,栈内存会开辟一个新内存
当修改a=2时,并不会对b产生影响。但这也算不上深拷贝,因为深拷是针对复杂的Object类型数据。
2> 引用数据类型的存储方式,名存在栈内存中,值存在堆内存中,但栈内存会提供一个引用的地址指向堆内存的值。
例如 int[] a= {1,2,3,4,5}
当b=a进行复制时,其实复制的是a的引用地址。
所以当对数组a进行修改时,由于a和b指向的是同一地址,所以b也会受影响,也就是浅拷贝。
小结:深拷贝:拷贝对象时,不仅把对象的引用进行拷贝,还把该对象引用的值也进行了拷贝,这样深拷贝后的拷贝对象和源对象相互独立,其中任何一个对象的改动都不会对另一个对象产生影响。
浅拷贝:拷贝对象时,仅仅把对象的引用进行拷贝,但拷贝后的拷贝对象和源对象使用同一份实体,其中一个对象的改动会对另一个对象产生影响。
(该四种方式对于基本类型来说都是深拷贝,对引用类型来说都是浅拷贝)
就是用一个for循环对元素进行逐个拷贝,速度较慢
import java.util.Arrays;
/**
* @Author WFG
* @Date 2019/4/9 8:31
*/
public class Demo1 {
public static void main(String[]args){
int[] a={1,2,3,4,5};
a[0] = 9;
int[] b=new int[a.length];
for(int i=0;i
import java.util.Arrays;
/**
* @Author WFG
* @Date 2019/4/9 8:31
*/
public class Demo1 {
public static void main(String[]args){
int[] a={1,2,3,4,5};
a[0] = 9;
int[] b=new int[a.length];
b=a.clone();
System.out.println(Arrays.toString(a));
System.out.println(Arrays.toString(b));
}
}
该方法是一个本地方法,源代码如下:
public static native void arraycopy(Object src, int srcPos, Object dest, int desPos, int length)
其参数含义为:(原数组,原数组的开始位置,目标数组,目标数组的开始位置,复制长度)
import java.util.Arrays;
/**
* @Author WFG
* @Date 2019/4/9 8:31
*/
public class Demo1 {
public static void main(String[]args){
int[] a={1,2,3,4,5};
a[0] = 9;
int[] b=new int[a.length];
System.arraycopy(a,0,b,0,a.length);
System.out.println(Arrays.toString(a));
System.out.println(Arrays.toString(b));
}
}
这个方法调用的是System.arraycopy
import java.util.Arrays;
/**
* @Author WFG
* @Date 2019/4/9 8:31
*/
public class Demo1 {
public static void main(String[]args){
int[] a={1,2,3,4,5};
a[0] = 9;
int[] b=new int[a.length];
b=Arrays.copyOf(a,a.length);
System.out.println(Arrays.toString(a));
System.out.println(Arrays.toString(b));
}
}