Java中的.length与.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语言中是如何存储的。二维数组其实在java语言中是按一维数组进行存储的(如果把二位数组比作一个矩阵的话,就是只存有几行),存储了各个连续存储单元的起始地址(eg:scores[0])。

2. 为什么会有.length呢?

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

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

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

得出结果:
在这里插入图片描述
还真是一样的,以后还是简写吧!

4. 数组是对象

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

clone()是第一个方法,就那这个开刀吧,我把鼠标放到方法上,发现了这个,如下图:
在这里插入图片描述
好家伙,你小子,数组是对象,继承自Object,那我试试下面这个报错不:
在这里插入图片描述
还真不报错,得出结论:数组是对象

二. .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()方法。

参考:
https://blog.csdn.net/weixin_52139713/article/details/126018792
https://blog.csdn.net/weixin_39959126/article/details/114153841

  • 5
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值