限时 1 秒钟给出答案,来来来,听我口令:“Java 如何获取数组和字符串的长度?length 还是 length()?

在逛 programcreek 的时候,我发现了上面这个主题。说实话,我当时脑海中浮现出了这样一副惊心动魄的画面:

面试官老马坐在我的对面,地中海式的发型令我敬佩有加。尽管略显疲惫,但他仍然自信地向我抛出了上面这个问题。稍稍迟疑了一下,我回答说:“数组用 length,字符串用 length 跟上小括号”。老马不愧是面试中的高手,一瞬间就从我的回答中捕获到了不自信。我能感受得出来,因为我看到老马的嘴角微微地动了一下,似乎想要咂咂嘴。但出于对于我的礼貌,他克制住了。

到底该用 length 还是 length(),说真的,我当时真有点吃不准,怀念 IDE 的代码自动提醒功能啊!

int[] arr = 

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

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

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

// new

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

由于数组也是对象,所以以下代码是合法的。

new 

这就意味着数组继承了超类 java.lang.Object 的所有成员方法和字段。事实上,的确如此,我们可以通过以下代码来获取数组的类型信息 Class。

new 

输出的结果会是什么呢?

class [I

class [I 表示一个“int 类型数组”在运行时的对象类型信息;class [Ljava.lang.String; 表示一个“字符串类型数组”在运行时的对象类型信息。

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

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

public 

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

那为什么字符串 String 类会有 length() 方法呢?来看一下源码就明白了。

/**     * Returns the length of this string.     * The length is equal to the number of Unicode     * code units in the string.     */

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

总结一下,Java 获取数组长度的时候用 length,获取字符串长度的时候用的是 length(),他们之间的区别我相信大家已经搞清楚了。

最后提醒一点:万丈高楼平地起。一栋楼能盖多高,一座大桥能造多长,重要的是它们的地基。同样对于我们技术人员来说,基础知识越扎实,走得就会越远。

- 没有更多了

c++获取数组长度_灵魂拷问:Java如何获取数组和字符串的长度?length还是length()?...相关推荐

  1. java 数组包含_灵魂拷问:如何检查 Java 数组中是否包含某个值?

    作者 | 沉默王二 责编 | Elle 在逛 programcreek 的时候,我发现了一些专注细节但价值连城的主题.比如说:如何检查Java数组中是否包含某个值 ?像这类灵魂拷问的主题,非常值得深入 ...

  2. java语言的数组描述_下列关于Java语言的数组描述中,错误的是()。_学小易找答案...

    [单选题]下面()是正确的main()方法说明. [填空题]Java规定,如果子类中定义的成员方法与父类中定义的成员方法同名,并且参数的( )和类型以及( )的类型也相同,则父类中的同名成员方法被屏蔽 ...

  3. java数组删除数组元素_如何在Java中删除数组元素

    java数组删除数组元素 When we create an array in Java, we specify its data type and size. This is used by JVM ...

  4. java 字符串 数组 索引_如何在Java中找到数组中元素的索引?

    我希望在Java中找到给定元素的索引,知道它的内容. 我尝试了以下示例,该示例不起作用: class masi { public static void main( String[] args ) { ...

  5. java怎么向二维数组赋值_如何给JAVA二维数组赋值

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 从文件里取出数据 按行存在一维数组里面 如何存进二维数组 我们方法显示不出来 求教 public static void main(String[] ar ...

  6. js解析java对象数组_js接收并转化Java中的数组对象的方法

    在做项目时,要向ocx控件下发命令,就要在js中得到java中的对象,然后拼成一种格式,下发下去...当对象是一个时比较简单,但如果对象是一个数组时,就略显麻烦了. 开始我以为有简单的方式,可以直接进 ...

  7. java 字符串赋值_灵魂拷问:为什么 Java 字符串是不可变的?

    在逛 programcreek 的时候,发现了一些精妙绝伦的主题.比如说:为什么 Java 字符串是不可变的?像这类灵魂拷问的主题,非常值得深思.对于绝大多数的初级程序员来说,往往停留在"知 ...

  8. java获取机器号_(转)JAVA获得机器码的实现

    http://yangshangchuan.iteye.com/blog/2012401 首先,定义了一个统一的接口,以支持不同操作系统不同实现的透明切换: Java代码  收藏代码 /** *生成机 ...

  9. esp8266接收到的数据如何存放到数组中_愉快地学Java语言:第七章 数组

    导读 本文适合Java入门,不太适合Java中高级软件工程师.本文以<Java程序设计基础篇>第10版为蓝本,采用不断提出问题,然后解答问题的方式来讲述.本篇文章只是这个系列中的一篇,如果 ...

最新文章

  1. 【高并发、高性能、高可用】系统设计经验分享!
  2. java datetime int_关于jodatime:Java中DateTime对象之间的小数天数
  3. java 通配符 日期_java – 使用带有通配符支持的SimpleDateFormat解析日期字符串(例如* yyyy * MM * dd * hh * mm * ss)...
  4. SAP CRM产品主数据无法根据产品描述字段进行搜索的原因
  5. part01.04 事件
  6. 剑指Offer-- 二维数组中的查找
  7. IE8的 JS 引擎如此不堪(二) - 解决方案
  8. C#调用SQL Server参数过程传参
  9. 在抖音上,你只要会装穷,会装富,会吹牛逼,会包装自己,会扯淡,那翻身就指日可待了
  10. bash脚本编程之条件判断、条件测试
  11. python的sorted用法
  12. opencv 头文件 包含 include 的问题
  13. Python-Pillow给图片加文字
  14. 【微信小程序】微信小程序项目开发哔哩哔哩小程序
  15. IOS内购验证 (Java版)
  16. vs调试详解(一)(小白教程)
  17. 夜光:武汉加油,中国加油
  18. 联想笔记本电脑novo键在哪?联想笔记本novo键位置介绍
  19. 苹果会下架所有的基于H5的开发的APP?
  20. kafka节点的服役和退役

热门文章

  1. kotlin spring-webflux netty
  2. 区块链技术的五大颠覆性价值
  3. 分布式文件系统之Tachyon是什么?
  4. 左神算法:复制含有随机指针节点的链表 / 复杂链表的复制(Java版本)
  5. HDFS High Availability体系介绍(Using the Quorum Journal Manager)
  6. 浅谈最小生成树的算法思路(一)Prim算法
  7. python输出列/行内容显示不全
  8. zookeeper的ZAB协议学习
  9. Promise第一篇:基本使用方法和串联
  10. ES6的字符串与正则表达式