热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

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

这篇文章主要介绍了Java如何获取数组和字符串的长度(length还是length()),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

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

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

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

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

int[] arr = new int[4];
System.out.println(arr.length);// 获取数组的长度

String str = "沉默王二";
System.out.println(str.length());// 获取字符串的长度

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

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

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

// new
int[] arr = new int[4];
arr[0] = 0;
arr[1] = 1;
arr[2] = 2;
arr[3] = 3;

// {}
int [] arr1 = {0, 1, 2, 3};

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

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

Object arr2 = new int[4];

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

Object arr2 = new int[4];
System.out.println(arr2.getClass());

Object arr3 = new String[4];
System.out.println(arr3.getClass());

输出的结果会是什么呢?

class [I
class [Ljava.lang.String;

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

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

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

public final class String
  implements java.io.Serializable, Comparable, 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(),他们之间的区别我相信大家已经搞清楚了。

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


推荐阅读
  • 深入解析Spring Cloud Ribbon负载均衡机制
    本文详细介绍了Spring Cloud中的Ribbon组件如何实现服务调用的负载均衡。通过分析其工作原理、源码结构及配置方式,帮助读者理解Ribbon在分布式系统中的重要作用。 ... [详细]
  • 本文详细介绍了如何使用Spring Boot进行高效开发,涵盖了配置、实例化容器以及核心注解的使用方法。 ... [详细]
  • 本文详细探讨了Java中StringBuffer类在不同情况下的扩容规则,包括空参构造、带初始字符串和指定初始容量的构造方法。通过实例代码和理论分析,帮助读者更好地理解StringBuffer的内部工作原理。 ... [详细]
  • 本文探讨了领域驱动设计(DDD)的核心概念、应用场景及其实现方式,详细介绍了其在企业级软件开发中的优势和挑战。通过对比事务脚本与领域模型,展示了DDD如何提升系统的可维护性和扩展性。 ... [详细]
  • 深入了解 Windows 窗体中的 SplitContainer 控件
    SplitContainer 控件是 Windows 窗体中的一种复合控件,由两个可调整大小的面板和一个可移动的拆分条组成。本文将详细介绍其功能、属性以及如何通过编程方式创建复杂的用户界面。 ... [详细]
  • 实体映射最强工具类:MapStruct真香 ... [详细]
  • 深入解析 Apache Shiro 安全框架架构
    本文详细介绍了 Apache Shiro,一个强大且灵活的开源安全框架。Shiro 专注于简化身份验证、授权、会话管理和加密等复杂的安全操作,使开发者能够更轻松地保护应用程序。其核心目标是提供易于使用和理解的API,同时确保高度的安全性和灵活性。 ... [详细]
  • 本文探讨了在Linux系统上使用Docker时,通过volume将主机上的HTML5文件挂载到容器内部指定目录时遇到的403错误,并提供了解决方案和详细的操作步骤。 ... [详细]
  • 探讨如何真正掌握Java EE,包括所需技能、工具和实践经验。资深软件教学总监李刚分享了对毕业生简历中常见问题的看法,并提供了详尽的标准。 ... [详细]
  • 作为一名专业的Web前端工程师,掌握HTML和CSS的命名规范是至关重要的。良好的命名习惯不仅有助于提高代码的可读性和维护性,还能促进团队协作。本文将详细介绍Web前端开发中常用的HTML和CSS命名规范,并提供实用的建议。 ... [详细]
  • 本文探讨了在 ASP.NET MVC 5 中实现松耦合组件的方法。通过分离关注点,应用程序的各个组件可以更加独立且易于维护和测试。文中详细介绍了依赖项注入(DI)及其在实现松耦合中的作用。 ... [详细]
  • Startup 类配置服务和应用的请求管道。Startup类ASP.NETCore应用使用 Startup 类,按照约定命名为 Startup。 Startup 类:可选择性地包括 ... [详细]
  • 网易严选Java开发面试:MySQL索引深度解析
    本文详细记录了网易严选Java开发岗位的面试经验,特别针对MySQL索引相关的技术问题进行了深入探讨。通过本文,读者可以了解面试官常问的索引问题及其背后的原理。 ... [详细]
  • 自己用过的一些比较有用的css3新属性【HTML】
    web前端|html教程自己用过的一些比较用的css3新属性web前端-html教程css3刚推出不久,虽然大多数的css3属性在很多流行的浏览器中不支持,但我个人觉得还是要尽量开 ... [详细]
  • 本文将深入探讨如何在不依赖第三方库的情况下,使用 React 处理表单输入和验证。我们将介绍一种高效且灵活的方法,涵盖表单提交、输入验证及错误处理等关键功能。 ... [详细]
author-avatar
张力宏智荣琬郁_271
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有