如何理解数组在Java中做为一个类?【完整版】

这是昨天一个小伙伴去面试被问到的问题。java

问题分析

Java中数组的使用方法和C/C++中的比较相似,可是在Java中它的本质是一个Java类,只是这个类比较特殊,因此很容易被一些程序员误解。建议在回答该问题的时候,全面地回顾下Java中数组的特性。程序员

你们都知道,Java的数据类型能够分为两种:基本类型和引用类型。那么数组属于哪种类型呢?很显然,数组确定不属于基本类型,由于基本类型只有那8种(byte、char、short、int、long、float、double、boolean)。那么数组就应该属于引用类型了,也就是说每个数组实例都是一个对象,这些对象同属于一个类。面试

首先,咱们来看看如何使用一个Java数组。大体有如下几个步骤:后端

  1. 声明数组,使用一个引用来操做数组数组

  2. 使用new关键字来为数组建立所须要的内存空间,而且返回一个引用的值,还能够用{}符号来为数组赋初始化值ide

  3. 使用数组的下标对数组的值进行操做spa

Java代码表示:code

   {
       ([] ) {
        []    []{, , };
        []    [];
        []  ;
        []  ;
        
        
         ( ;.;){
            ..([]);
        }
         ( :){
            ..();
        }
    }
}

输出orm

20
21
22
Java后端技术栈
lawt

两种类型的数组有一个共同的特色,就是在建立的时候必须指定一个长度。其实,这是由于这些数组在建立的时候,会动态地为这些类建立指定数目的成员变量,而且为这些成员变量赋初始值。可是Java不会让程序员像使用普通类那样去操做这些成员变量,而是经过[]符号,使用下标访问这些数据。另外,Java还为每个数组对象提供了一个length属性,用于指导该数组的长度。对象

那么,数组的类名是什么呢?

其实数组的类型与它存储的数据类型有关,它们的类名能够经过获取数组的Class类型类获取,以下:

..(.().());
..(.().());

输出

[I
[Ljava.lang.String;

能够看得出,数组类名老是以左中括号开头,而后就是不一样的标识。例如,int类型的数组则是I字符标识,字符串类型数组则是Ljava.lang.String。经过这些标识,程序员就能够较为快速地判断出数组存储的是哪种类型的数据。

若是把上面代码调整一下,不给数组元素赋值:

   {
       ([] ) {
        []    [];
        []    [];
        
         ( ;.;){
            ..([]);
        }
         ( :){
            ..();
        }
        ..(.().());
        ..(.().());
    }
}

输出结果为:

0
0
0
null
null
[I
[Ljava.lang.String;

以上的输出即是数组元素在没有赋值时候的默认值。

参考答案

Java的数组本质是一个类,该类还保存了数据类型的信息。该类经过成员变量的形式来保存数据,而且经过[]加上下标来访问数组数据。在处理基本类型数据时,数组保存的是变量的值,

好比int [] array=new int[3];这时候并无为数组中的元素赋值,可是数组会把这些变量的值初始化为int [] array=new int[]{0,0,0};;

并且处理引用类型是数组保存的是数据的引用,若是程序员未提供初始值,数组会把这些变量的值初始化为null,好比String[] strings = new String[2];默认初始化String[] strings = new String[]{null,null};

能够使用ints.getClass().getName();来获取对应的Class名称。

相关文章
相关标签/搜索