目录

  • 一. .length
  • 1. .length究竟有多长?
  • 2. 为什么会有.length呢?
  • 3. 二维数组的创建方法
  • 4. 数组是对象
  • 二. .length()
  • 1. .length()怎么用呢?
  • 2. char数组怎么转换为String
  • 3. String怎么转换为char数组
  • 三. 对比
  • 1. 为什么数组不像String,没有自己的类呢?
  • 2. 为什么String不能增加一个.length属性呢?


一. .length

1. .length究竟有多长?

先来回答两个问题,下面这两条

int[][] a1 = new int[3][100];
        int[][] a2 = new int[3][6];

        System.out.println(a1.length);
        System.out.println(a2.length);

两个答案都是3。为什么会这样呢?我们看下面这张图:

java length的作用 java .length()_数据


这张图清晰的展示了二维数组在java语言中是如何存储的。二维数组其实在java语言中是按一维数组进行存储的(如果把二位数组比作一个矩阵的话,就是只存有几行),存储了各个连续存储单元的起始地址(eg:scores[0])。

2. 为什么会有.length呢?

那么为什么定义了一个数组之后,就可以使用.length属性呢?

因为数组本身是个容器,当数组创建好那一瞬间,申请的内存空间就是确定的,所以数组的长度自然也是确定的,它的类型是public final int,如下图:

java length的作用 java .length()_数据类型_02

3. 二维数组的创建方法

都说到这了,我们再回顾一下二维数组的创建方法:

  • 数据类型[ ][ ] 数组名=new 数据类型[数组长度][数组长度];
  • int[][] a = new int[3][4];
  • 数据类型[ ][ ] 数组名=new 数据类型[数组长度][ ];
  • int[][] a = new int[3][];
  • 数据类型[ ][ ] 数组名 = new 数据类型[ ][ ]{{数据1,数据2,…,数据n},{数据1,数据2,…,数据m},…,{数据1,数据2,…,数据q}};
  • n,m,q可以不相同,也就是每一列的数据个数可以不相同。
  • int[][] a = new int[][]{{1},{1,2},{1,2,3}};
  • 数据类型[ ][ ] 数组名=new 数据类型[数组长度][ ];
  • 这个方法可以看作是上一个方法的简化。
  • int[][] a = {{1},{1,2},{1,2,3}};

验证一下方法三和方法四是不是一样的:

int[][] a3 = new int[][]{{1},{1},{1}};
    int[][] a4 = {{1}, {1}, {1}};

    System.out.println(Arrays.deepToString(a3));
    System.out.println(Arrays.deepToString(a4));

得出结果:

java length的作用 java .length()_数组_03


还真是一样的,以后还是简写吧!

4. 数组是对象

敲着敲着,发现这输入.length的时候,.之后,怎么有这么多选项,如下图:

java length的作用 java .length()_数据类型_04

clone()是第一个方法,就那这个开刀吧,我把鼠标放到方法上,发现了这个,如下图:

java length的作用 java .length()_数组_05


好家伙,你小子,数组是对象,继承自Object,那我试试下面这个报错不:

java length的作用 java .length()_java_06


还真不报错,得出结论:数组是对象

二. .length()

1. .length()怎么用呢?

这玩意怎么用呢,看下面

String s = "daf-asf";
        System.out.println(s.length());

2. char数组怎么转换为String

char[] r = {'a', 'b', 'c'};

//法一:
	String s1 = new String(r);
//法二:
	String s2 = String.valueOf(r);
//法三:
	String s3 = r.toString();

3. String怎么转换为char数组

String s = "daf-asf";
        
	char[] t = s.toCharArray();

三. 对比

1. 为什么数组不像String,没有自己的类呢?

没有必要。因为即使有了Array类,还需要额外的空间来存放数组。(这有点像先有鸡还是先有蛋的问题)String的底层是用char数组来实现的,不用考虑这个问题。

2. 为什么String不能增加一个.length属性呢?

没必要,因为String的底层是char数组,char数组已经有这个属性了。但是在java语言中,String与char数组又不是同一个东西,所以,就有了length()方法。