今天在写代码的时候用到了java.lang.String.isEmpty()的这个方法,之前也用过,今天突发奇想,就看了看源码,了解了解它的实现方法,总结出来,大家可以交流交流。

通常情况下,我们使用这个方法的时候是这样的:

"hello wudb".isEmpty();

上面的代码返回的是false,然后我们打开源码分析,isEmpty()这个方法在很多类里面都有,我们今天分析的是String里面的,所以找到java.lang.String这个类,然后去找idEmpty()这个方法

 /*** Returns {@code true} if, and only if, {@link #length()} is {@code 0}.** @return {@code true} if {@link #length()} is {@code 0}, otherwise* {@code false}** @since 1.6*/public boolean isEmpty() {return value.length == 0;}

源码里面已经所得很清楚了,当且仅当字符串的长度为0的时候返回的是true,否则返回的是false这两个布尔类型的值,方法中出现的value是什么呢,继续找

 /** The value is used for character storage. */private final char value[];

在String这个类的上方定义了一个char类型的一维数组,由此可以看到String的实现是基于char类型实现的(实际上是Unicode字符序列)。这一点在Stirng的另一个方法length()上面也有体现:

/*** Returns the length of this string.* The length is equal to the number of <a href="Character.html#unicode">Unicode* code units</a> in the string.** @return  the length of the sequence of characters represented by this*          object.*/public int length() {return value.length;}

这里的字符串长度也是使用的char数组的长度属性。

所以当字符串为""的时候"".isEmpty返回的是true,当字符串为null时null.isEmpty是会报错的。所以在使用isEmpty这个方法的时候,要先确保字符串时不能为null的。

工作之余看一看源码还是很有帮助的,我看网上就有讨论null、""和isEmpty之间的区别,其实像这样的问题,我们完全可以通过阅读源码来解决。

转载于:https://www.cnblogs.com/wudb/p/7503860.html

从源码分析java.lang.String.isEmpty()相关推荐

  1. java string is empty_从源码分析java.lang.String.isEmpty()

    今天在写代码的时候用到了java.lang.String.isEmpty()的这个方法,之前也用过,今天突发奇想,就看了看源码,了解了解它的实现方法,总结出来,大家可以交流交流. 通常情况下,我们使用 ...

  2. 【JAVA源码分析——Java.lang】String源码分析

    String 基本实现 初学java经常会误认为String是java基本类型,实际上String并非Java基本类型,String本质上是对char数组的封装. 以下是String实现相关源码 /* ...

  3. JDK1.8源码(三)——java.lang.String 类

    String 类也是java.lang 包下的一个类,算是日常编码中最常用的一个类了,那么本篇博客就来详细的介绍 String 类. 1.String 类的定义 public final class ...

  4. 深入源码分析Java线程池的实现原理

    转载自   深入源码分析Java线程池的实现原理 程序的运行,其本质上,是对系统资源(CPU.内存.磁盘.网络等等)的使用.如何高效的使用这些资源是我们编程优化演进的一个方向.今天说的线程池就是一种对 ...

  5. 【转】源码分析C++的string实现

    转自:源码分析C++的string实现 - 知乎 我们平时使用C++开发过程中或多或少都会使用std::string,但您了解string具体是如何实现的吗,这里程序喵给大家从源码角度分析一下. 读完 ...

  6. 视频教程-Spring底层源码分析-Java

    Spring底层源码分析 鲁班学院-子路老师曾就职于谷歌.天猫电商等多家互联网公司,历任java架构师.研发经理等职位,参与并主导千万级并发电商网站与后端供应链研发体系搭建,多次参与电商大促活动技术保 ...

  7. 视频教程-RPC服务框架(Dubbo)源码分析-Java

    RPC服务框架(Dubbo)源码分析 鲁班学院-子路老师曾就职于谷歌.天猫电商等多家互联网公司,历任java架构师.研发经理等职位,参与并主导千万级并发电商网站与后端供应链研发体系搭建,多次参与电商大 ...

  8. 【JDK源码】java.lang包常用类详解

    接下来的几天开始JDK源码的学习和总结,之前看<java编程思想>的时候看到java的基础知识有很多,其中支撑着这些基础的基础中的基础当属JDK.JDK的基础代码里面又分了很多基础的模块, ...

  9. java类加载机制为什么双亲委派_[五]类加载机制双亲委派机制 底层代码实现原理 源码分析 java类加载双亲委派机制是如何实现的...

    Launcher启动类 本文是双亲委派机制的源码分析部分,类加载机制中的双亲委派模型对于jvm的稳定运行是非常重要的不过源码其实比较简单,接下来简单介绍一下我们先从启动类说起有一个Launcher类 ...

最新文章

  1. 多个矩形,求覆盖面积,周长,及交点
  2. linux中sed深入,Linux中的sed
  3. 软件外包故事 - 加入团队战斗
  4. Magicodes.WeiChat——媒体资源选择组件之media-choice(开源)
  5. PGM中置信传递、和—积算法
  6. 关于序列建模,是时候抛弃RNN和LSTM了
  7. 十年磨一剑,阿里云RDS MySQL和AWS RDS谁的性能更胜一筹?
  8. sklearn模型支持输入list吗?
  9. oracle查询不等于1000,解决oracle查询时 in 大于1000的办法
  10. 油管机器学习基础 学习笔记
  11. html 自动字体大小,根据屏幕大小自动修改字体大小的代码
  12. ADO的七个对象详情解读
  13. 写给 Linux 初学者的一封信
  14. 《Python》典型数据结构
  15. TCP/IP高频考点之一个数据包的流浪日记 - 网络层
  16. Oracle_Linux of Creation hr user for Oracle 18c oracle 练习的账户(hr user)
  17. 赛扬N4000和赛扬N5095的区别
  18. 可雅白兰地koya白兰地:可雅XO白兰地的悠然人生
  19. Fedora24!到此一游
  20. 二次函数图像怎么画?

热门文章

  1. matlab产生mif 文件,生成.mif文件的matlab程序
  2. python小数乘法_Polymorph:支持几乎所有现有协议的实时网络数据包操作框架
  3. 需求调研计划_干货!如何做好一个BI项目的规划和需求定义?
  4. 浏览器打开域名变成localhost_史上最全微信域名防封API原理及实现方案
  5. 临床医学与计算机考研哪个好考,临床医学考研院校难度概况
  6. java链表实现_数据结构——基于java的链表实现(真正理解链表这种数据结构)...
  7. mysql group by join_mysql – GROUP BY之后的LEFT JOIN?
  8. python斐波那契数列前20项_Python每日一练之实现斐波那契数列
  9. mysql的原理图解_MySQL排序工作原理
  10. python断点调试从哪里看数据_Python Pdb 断点调试 - 简明教程