对象数组和基本类型数组在使用上几乎是一致的,唯一的区别是对象数组保存的是对象引用,
基本类型数组直接保存基本类型的值。
新生成一个数组时,会初始化,如果是对象数组,则被初始化为null;如果是基本类型数组,数值型
被初始化为0,Char类型被初始化为空,布尔类型被初始化为false。
package chapter16;
class A{
}
public class arr1 {
public static void main(String[] args) {
int[] is=new int[5];
for (int i:is){
System.out.println(i);
}
char[] cs=new char[5];
for (char c:cs){
System.out.println(c);
}
boolean[] bs=new boolean[5];
for (boolean b:bs){
System.out.println(b);
}
A[] as=new A[5];
for (A a:as){
System.out.println(a);
}
}
}
输出结果:
0
0
0
0
0
false
false
false
false
false
null
null
null
null
null
创建多维数组:
对于基本类型的数组,可以使用花括号将每个向量分隔开。
package chapter16;
import java.lang.reflect.Array;
import java.util.Arrays;
class A{
}
public class arr1 {
public static void main(String[] args) {
int[][] is={{1,2,3},{4,5,6}};
System.out.println(Arrays.deepToString(is));
}
}
输出结果:
[[1, 2, 3], [4, 5, 6]]
还可以使用new来分配数组。
package chapter16;
import java.lang.reflect.Array;
import java.util.Arrays;
class A{
}
public class arr1 {
public static void main(String[] args) {
int[][] is=new int[2][3];
System.out.println(Arrays.deepToString(is));
}
}
输出结果:
[[0, 0, 0], [0, 0, 0]]
java数组进行拷贝复制的几种方式:
package chapter16;
import java.lang.reflect.Array;
import java.util.Arrays;
class A{
}
public class arr1 {
public static void main(String[] args) {
//直接赋值
int[] i={1,2,3};
int[] j=i;
System.out.println(Arrays.toString(i));
System.out.println(Arrays.toString(j));
System.out.println(i);
System.out.println(j);
System.out.println(i==j);
//使用for循环
int[] k={1,2,3};
int[] l=k.clone();
System.out.println(Arrays.toString(k));
System.out.println(Arrays.toString(l));
System.out.println(k);
System.out.println(l);
System.out.println(k==l);
//利用Arrays自带的copyof
int[] m={1,2,3};
int[] n=m.clone();
System.out.println(Arrays.toString(m));
System.out.println(Arrays.toString(n));
System.out.println(m);
System.out.println(n);
System.out.println(m==n);
//System.arraycopy
int[] o={1,2,3};
int[] p=new int[5];
System.arraycopy(o,0,p,0,o.length);
System.out.println(Arrays.toString(o));
System.out.println(Arrays.toString(p));
System.out.println(o);
System.out.println(p);
System.out.println(o==p);
}
}
输出结果:
[1, 2, 3]
[1, 2, 3]
[I@1540e19d
[I@1540e19d
true
[1, 2, 3]
[1, 2, 3]
[I@677327b6
[I@14ae5a5
false
[1, 2, 3]
[1, 2, 3]
[I@7f31245a
[I@6d6f6e28
false
[1, 2, 3]
[1, 2, 3, 0, 0]
[I@135fbaa4
[I@45ee12a7
false
可以看到,第一种,两个数组的地址是一样的,也就是说如果其中一个数组发生改变,另一个数组对应的值也会改变;其他三种两个数组地址都不相等,也就是说创建了新的数组。
Arrays.equals 比较的是对应位置的元素是否相等
package chapter16;
import java.lang.reflect.Array;
import java.util.Arrays;
class A{
}
public class arr1 {
public static void main(String[] args) {
//直接赋值
int[] i={1,2,3};
int[] j=i;
i[0]=0;
System.out.println(Arrays.toString(i));
System.out.println(Arrays.toString(j));
System.out.println(Arrays.equals(i,j));
//使用for循环
int[] k={1,2,3};
int[] l=k.clone();
System.out.println(Arrays.toString(k));
System.out.println(Arrays.toString(l));
System.out.println(Arrays.equals(i,j));
//利用Arrays自带的copyof
int[] m={1,2,3};
int[] n=m.clone();
System.out.println(Arrays.toString(m));
System.out.println(Arrays.toString(n));
System.out.println(Arrays.equals(m,n));
//System.arraycopy
int[] o={1,2,3};
int[] p=new int[5];
System.arraycopy(o,0,p,0,o.length);
System.out.println(Arrays.toString(o));
System.out.println(Arrays.toString(p));
System.out.println(Arrays.equals(o,p));
}
}
结果:
[0, 2, 3]
[0, 2, 3]
true
[1, 2, 3]
[1, 2, 3]
true
[1, 2, 3]
[1, 2, 3]
true
[1, 2, 3]
[1, 2, 3, 0, 0]
false