length, length(), size() Java

1.length【数组】

 例子:String [] myList={"str1","str2","str3"};

                      System.out.println(myList.length);

 2.length()【字符串String】

          例子:String [] myString="stringtest";

                    System.out.println(myList.length());

3.size()【集合】

例子:List<Object> array=new ArrayList();
                    array.add(a);
                    System.out.println(array.size());

为什么数组有length属性域而String没有呢?或者说为什么字符串对象有 length() 方法而数组没有呢?

1. 为什么数组有length属性?
首先,数组是一个容器对象,用于保存单个类型的固定数量的值。在数组创建以后,其长度是固定不变的。所以数组的length属性可以作为一个final域存在. 因此length可以作为数组(array)的定义属性(defining attribute).

数组有两种创建方式:

1) new 数组创建表达式

2) 大括号形式的数组初始化器( array initializer)

数组在创建的时候,其大小就被指定了. 下面的声明也是合法的,因为指明了数组的维度以及顶层维度的大小。

int[][] arr = new int[3][];

2. 为什么不像String一样定义一个"Array"类呢?
既然数组是对象,那么下面的代码就是合法的:

Object obj = new int[10];

数组对象含有所有从Object类继承的成员(除了 clone 方法).为什么没有定义一个array的类呢? 我们也不能找到一个叫做 Array.java 的类(文件). 一个粗略的说法是这个类对开发者不可见。

可以思考这个问题? —— 如果有一个显式的Array类,那么它应该是什么样子呢? 它仍然需要一个数组来保存 数组元素,对吧?  因此定义这样一个类是不太合理的。

实际上我们可以得到一个数组的 class(属性),代码如下所示:

  1. int[] arr = new int[3];

  2. System.out.println(arr.getClass());

输出结果:

class [I

"class [I" 代表 "一个成员类型是 int 的数组"  的运行时签名.
3. 为什么String有length() 方法呢?
String对象背后的数据结构是 char 字符数组, 并不需要定义一个不怎么用到的属性域, 和C语言不一样,在Java中一个 char型的数组并不是String。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值