整理自网络。
int[] a = new int[10];
int[] b;
b = a;
让数组b直接指向数组a(即b = a;),这样做的目的是为了提高程序运行的效率。
试想一下,假如数组中有上万个元素,在拷贝数组时,如果将数组a的所有元素都一一拷贝至数组b,时间开销很大,有时候也不是必需的。
所以,在Java语言中,b =a(a和b都是引用名)的含义就是将a起个别名"b"。
a和b其实就是指向的是同一个对象。
在Java中,这种给变量取别名的机制称之为引用(reference)。
研究下面程序:
public class ArrayDemo {
public static void main(String args[]) {
int data[] = null;
data = new int[3]; //开辟一个长度为3的数组
int temp[] = null; //声明对象
data[0] = 10;
data[1] = 20;
data[2] = 30;
temp = data; //int temp[] = data;
temp[0] = 99;
for(int i = 0; i < temp.length; i++) {
System.out.println(data[i]);
}
}
}
注意,对应代码中的temp[0] = 99;,data[0]也变为了99。
即同一块堆内存会被不同的栈内存所指向。
double[] myList; // 首选的方法
double myList[]; // 效果相同,但不是首选方法
1、动态初始化:如前面的例子,数组先开辟内存空间,而后再使用索引进行内容的设置。
2、静态初始化:数组在定义的时候可以同时出现设置内容。
数组的静态初始化一共分为以下两种类型:
简化格式
数据类型 数组名称 = {值, 值,…}
完整格式
数据类型 数组名称 = new 数据类型[] {值, 值,…}
例子:
简化格式:
public class ArrayDemo {
public static void main(String args[]) {
int data[] = {1, 2, 4, 545, 11, 32, 13131, 4444};//简化格式
for(int i = 0; i < data.length; i++) {
System.out.println(data[i]);
}
}
}
完整格式:
(对于静态数组的初始化强烈建议使用完整语法模式,这样可以轻松地使用匿名数组这一概念。)
public class ArrayDemo {
public static void main(String args[]) {
System.out.println(new int[] {1, 2, 4, 545, 11, 32, 13131, 4444}.length);
//匿名数组,直接通过 new 数据类型[] {值, 值,…}定义
}
}
数组最大的缺陷:长度固定。
举个例子:
在此基础上对数组进行操作:定义一个方法,该方法可以实现数组的内容的乘2。
举例:
public class TestArray {
public static void main(String[] args) {
double[] myList = {1.9, 2.9, 3.4, 3.5};
// 打印所有数组元素
for (double element: myList) {
System.out.println(element);
}
}
}
运行结果:
1.9
2.9
3.4
3.5
int a[][] = new int[2][3];
二维数组 a 初始化为一个两行三列的数组。
复制代码
此类提供的所有方法都是静态的(static)。
1、给数组赋值:通过 fill 方法。
public static void fill(int[] a, int val)
int 值分配给指定 int 型数组指定范围中的每个元素。同样的方法适用于所有的其他基本数据类型(Byte,short,Int等)。
2、对数组排序:通过 sort 方法,按升序。
public static void sort(Object[] a)
对指定对象数组根据其元素的自然顺序进行升序排列。同样的方法适用于所有的其他基本数据类型(Byte,short,Int等)。
3、比较数组:通过 equals 方法比较数组中元素值是否相等。
public static boolean equals(long[] a, long[] a2)
如果两个指定的 long 型数组彼此相等,则返回 true。如果两个数组包含相同数量的元素,并且两个数组中的所有相应元素对都是相等的,则认为这两个数组是相等的。换句话说,如果两个数组以相同顺序包含相同的元素,则两个数组是相等的。同样的方法适用于所有的其他基本数据类型(Byte,short,Int等)。
4、查找数组元素:通过 binarySearch方法能对排序好的数组进行二分查找法操作。
public static int binarySearch(Object[] a, Object key)
用二分查找算法在给定数组中搜索给定值的对象(Byte,Int,double等)。数组在调用前必须排序好的。如果查找值包含在数组中,则返回搜索键的索引;否则返回 (-(插入点) - 1)。
错题一:以下输出是什么 ?
class ChangeIt
{
static void doIt( int[] z )
{
z = null ;
}
}
class TestIt
{
public static void main ( String[] args )
{
int[] myArray = {1, 2, 3, 4, 5};
ChangeIt.doIt( myArray );
for(int j=0; j
System.out.print( myArray[j] + " " );
}
}
复制代码A. 1 2 3 4 5
B. 什么都不会打印出来
C. 程序将因运行时错误而停止。
D. 0 0 0 0 0
正确答案不是B是A,数组虽然是引用传递 ,但是引用 z = null 只是引用z不指向任何对象 ,并不会对原先指向的对象数据进行修改。
可以理解为z=null里头,z还只是地址,如果z[0]就是地址对应的值了,如果z的操作是修改值,那么数组值改变,但是直接将z赋值为null,相当于将z这个地址置为null,不再指向myArray,因此myArray的值不变。