整理自网络。

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]);
}
}
}

Java传递数组的引用 java方法传入数组_数据类型

注意,对应代码中的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 数据类型[] {值, 值,…}定义
}
}

数组最大的缺陷:长度固定。

举个例子:

Java传递数组的引用 java方法传入数组_数据类型_02

在此基础上对数组进行操作:定义一个方法,该方法可以实现数组的内容的乘2。

Java传递数组的引用 java方法传入数组_Java传递数组的引用_03

Java传递数组的引用 java方法传入数组_数据类型_04

举例:

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的值不变。