Java如何获取数组和字符串的长度?length还是length()?-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

Java如何获取数组和字符串的长度?length还是length()?

游客pklijor6gytpx 2019-12-25 16:54:19 357

按理说,数组和字符串都是对象,访问长度都用 length() 方法就好了。为什么数组偏偏剑走偏锋用的 length 字段呢?

Java
分享到
取消 提交回答
全部回答(2)
  • 游客pklijor6gytpx
    2019-12-27 09:41:57

    数组是一个容器,当它被创建后,不仅元素的类型是确定的,元素的个数也是确定的。换句话说,数组的长度是确定的,不可能再变长或者变短。因此,数组可以使用一个字段(length)来表示长度。

    创建数组的方法有两种,这个应该大家都知道了。一种是通过 new 关键字创建指定长度后再赋值,另外一种是通过 {} 直接进行初始化。

    // newint[] arr = new int[4];
    
    arr[0] = 0;
    
    arr[1] = 1;
    
    arr[2] = 2;
    
    arr[3] = 3;// 
    
    {}int [] arr1 = {0, 1, 2, 3};
    

    但不管用哪种方法,数组的长度是可以明确知道的。并且不会再变长或者变短(学不了孙悟空的金箍棒)。 由于数组也是对象,所以以下代码是合法的。

    那为什么数组不单独定义一个类来表示呢?就像字符串 String 类那样呢?

    一个合理的解释是 Java 将其隐藏了。假如真的存在一个 Array.java,我们也可以假想它真实的样子,它必须要定义一个容器来存放数组的元素,就像 String 类那样。

    public final class String    
    
    implements java.io.Serializable, Comparable<String>, CharSequence {    
    
    /** The value is used for character storage. */    
    
    private final char value[];
    }
    

    但这样做真的有必要吗?为数组单独定义一个类,是不是有点画蛇添足的意味。那既然数组没必要定义成一个类,也就没有必要再定义一个 length() 方法来获取数组的长度了,直接用 length 这个字段就可以了,不是吗? 那为什么字符串 String 类会有 length() 方法呢?来看一下源码就明白了。

        /**     * Returns the length of this string.     
    
    *The length is equal to the number of Unicode     
    
    * code units in the string.     
    
    */    public int length() {        
    
    return value.length;    
    
    }
    

    length() 方法返回的正是字符数组 value 的长度(length),value 本身是 private 的,因此很有必要为 String 类提供一个 public 级别的方法来供外部访问字符的长度。

    总结一下,Java 获取数组长度的时候用 length,获取字符串长度的时候用的是 length()。

    0 0
  • 问问小秘
    2019-12-25 17:43:37

    length?

    0 0
添加回答
开发与运维
使用钉钉扫一扫加入圈子
+ 订阅

集结各类场景实战经验,助你开发运维畅行无忧

推荐文章
相似问题
推荐课程