经典面试题解析

经典面试题解析

数组的定义

数组的初始化

一维数组

在Java中可以通过两种方式定义一个一维数组

type[] arrayName;
type[] arrayName[];

需要注意一点,在定义一个一维数组,方括号[ ]不能填写数字

推荐使用第一种方法定义数组。定义了一个数组还不能使用它,因为它只是一个引用,还需要指向一个堆内存种的数组实例才能使用,也就是数组的初始化。Java中初始化数组有两种方法:静态初始化和动态初始化数组。

静态初始化数组是指在定义数组时显式地指定每个数组元素的初始化值,系统会根据初始化值的个数和类型决定数组的大小。例如:

int[] arrayName;//定义一个数组
arrayName=new int[]{1,2,3,4,5,6};//数组的初始化

或者将数组定义和数组的初始化同时完成:

int[]arrayName={1,2,3,4,5,6};//定义数组和初始化数组同时完成

这样系统会在堆内存中分配6个int类型长度大小的内存空间,并初始化数组元素为1、2、3、4、5、6。除了静态初始化数组外,使用再多的还是动态初始化数组。动态初始化数组是指仅仅指定数组的长度,不需要指定数组元素的初始值。例如:

int[] arrayName;//定义一个数组
arrayName=new int[6];//动态初始化数组,指定数组的长度

或者将数组定义和数组的初始化同时完成:

int[] arrayName=new int[6];//定义数组和初始化数组同时完成

这样系统会在堆内存上为数组arrayName分配6个int类型长度大小的内存空间。

二维数组

Java不仅支持一维数组,还支持二维数组,二维数组有三种定义方法:

type arrayName[][];
type[][]arrayName;
type[]arrayName[];

需要注意一点,在定义一个二维数组时,方括号[]中不能填写任何数字。

与一维数组类似,单纯定义了一个二维数组并不能使用它,还需要指向一个堆内存中的数组实例才能使用。Java中初始化二维数组有两种方法:静态初始化数组和动态初始化数组。

静态初始化二维数组是在定义该二维数组时显式地指定每个数组元素的初始值,系统会根据初始值的个数和类型决定数组的大小,例如:

int[][] arrayName;//定义一个数组
arrayName=new int[][]{{1,2,3,4,5,6},{7,8,9,10,11}};//数组的初始化

或者

//定义数组和初始化数组同时完成
int[][]arrayName={{1,2,3,4,5,6},{7,8,9,10,11}};

动态初始化数组是指仅仅指定数组的长度,不需要指定数组元素的初始值。例如:

int[][] arrayName;//定义一个数组
arrayName=new int[6][3];//动态初始化数组,指定数组的行数和列数

或者将数组定义和数组初始化同时完成:

int[] arrayName=new int[6][3];//定义数组和初始化数组同时完成

有一点需要注意,在动态初始化一维或者二维数组时,由于不指定数组元素的初始值,所以系统将负责为这些元素分配初始值。

分配数组元素初始值的规则如下:

  • byte、short、int、long元素初始值为0;
  • float、double元素初始值为0.0
  • char元素初始化值为’\n0000’
  • boolean元素初始值为false
  • 引用类型(各种自定义类型、数组等)初始化为null

还要一点需要注意,与C++不同,Java中的二维数组第二个维度的长度可以不同,因此更加灵活。例如:

int[][] arrayName={{1,2},{3,4,5}};

或者

int[][]arayName=new int[2][];
a[0]=new int[]{1,2};
a[1]=new int[]{3,4,5};

也就是说,Java中的数组每行的列数可以不同,例如,上面定义的这个二维数组,第一行中包含两列,而第二行中包含三列。

简述Java中如何复制一个整形数组

数组的特性

数组的操作

数组是引用类型,所以数组的复制有别于一般的基本类型。通常情况下用赋值运算符”=“对基本类型的数据进行复制,但是如果要对数组类型的变量要用同样的方法复制,则只是将一个数组的引用传递给另一个数组变量。例如:

int[]a=new int[3];
int[]b=a;

此时变量a和b其实都指向同一个数组,而我们理解的复制应该是真实地增加一份数组的拷贝。因此对于数组的复制,不能采用赋值运算符”=“方法。

那么在Java中用什么方法进行数组的复制呢?有几种方法仅供参考。

方法一:使用循环语句将一个数组的内容拷贝到另一个数组中。

int[]src={1,2,3,4,5,6};
int[]dest=new int[6];
for(int i=0;i<6;i++){
dest[i]=src[i];
}

这样就可以将数组src的内容复制到数组dest中,使得数组dest与src的内容是完全一样的。

方法二:使用数组的clone()方法

由于Java中的引用类型不能通过简单的复制来解决对象复制的问题,所以很多情况下可以采用clone()方法来复制对象。例如下面这段代码:

public static void main(String[] args){
    int[]array1={1,2,3,4.5};
    int[] array2;
    array2=array1.clone();
    array1[0]=100;
    for(int i=0;i<array1.length;i++){
        System.out.println(array[i]+" ");
    }
    System.out.println();
    for(int i=0;i<array2.length;i++){
        System.out.print(array2[i]+" ");
    }
}

上述代码中,首先初始化一个整形数组array1,并定义了一个整形数组array2,调用array2的clone方法将数组array1复制一份给arrray2。这样array2将会指向堆上的一个新的数组,该数组中的内容与array1指向的那个数组是一样的,从而实现了数组的赋值。把array1[0]的值修改为100,然后循环输出array1和array2的内容。

array1和array2是两个不同的数组。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值