数组

一 基本特性

  • 数组是对象,不属于基本数据类型,不同类型的数组具有不同的类;
  • 大小不可变且存储的内存地址连续;
  • 数组有一个.length的属性,String类有一个length()方法;
  • 数组的equals方法是object类的equals,比较的是内存地址(并不是遍历每一个一次进行比较)。

二 数组的声明和初始化

一维和二维数组的定义

注意:通过new 关键字来数组申请空间时候行数不能为空

package test11;
public class ArrayTest {
	//以为数组的合法定义
    private int[] a;
    private int b[];
    private int []c;

    //二维数组定义,(重点)一维长度必须定义,二维可以后续定义
    //格式:type arrayName[][] = new type[行数][列数]
    private int d[][];
    private int[][] e;
    private int[] f[];
    private int [][]g;
    private float []h[] = new float[6][6];

	
	public static void main(String[] args) {
		int[] a = new int[]{1};
        double[] b = new double[]{(double)2};
        System.out.println(a); //[I@14ae5a5
        System.out.println(b); //[D@7f31245a

        int[] i = new int[]{1,2,3};
        System.out.println(i.length);
        int[] j = new int[]{1,2,3};
        System.out.println(i.equals(j));
	}
}

通过初始化列表的方式进行初始化

package test11;
public class ArrayTest {

	int a[][] =  {{1},{1,2},{1,2,3}};
	public static void main(String[] args) {
	}
}

字节码

Java中数组是一个特殊类,通过上面的代码也可以泛型数组不是通过new 一个特定的数组类初始化的。那么数组的实例化的过程是怎么的呢?于是我尝试通过字节码找找线索。

    public static void main(String[] args) {
        int[] array = new int[1];
    }

该方法对应的字节码,如下,关键点就是newarray 指令,该指令就是用于数组对象,而普通的变量是通过new指令创建对象。
JVM 规范中关于newarray 指令的说明
JVM 规范中关于new 指令的说明

0 iconst_1 #把常量1压入操作树栈,这里1声明数组的指定的长度,
1 newarray 10 (int) # 创建数组实例,10表是数组的类型为int型
3 astore_1 #被操作栈中的栈顶元素,压入本地变量表的1号位置
4 return #返回

常见面试题

牛客网-数组

补充

怎么判断当前实例是否为数组类型

最近在看源码的时候发现Class类中有一个isArray()方法用来判断是否为数组类型,特此记录一下。普通类用instanceof关键字判断是否为某个类的实例。

public class ArrayExample {

    public static void main(String[] args) {
        int[] arr = new int[6];
        Class<? extends int[]> aClass = arr.getClass();
        boolean array = aClass.isArray();
        System.out.println(array); //true

        Class<ArrayExample> testClass = ArrayExample.class;
        System.out.println(testClass.isArray()); //false
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值