从源码分析java.lang.String.isEmpty()
今天在写代码的时候用到了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()相关推荐
- java string is empty_从源码分析java.lang.String.isEmpty()
今天在写代码的时候用到了java.lang.String.isEmpty()的这个方法,之前也用过,今天突发奇想,就看了看源码,了解了解它的实现方法,总结出来,大家可以交流交流. 通常情况下,我们使用 ...
- 【JAVA源码分析——Java.lang】String源码分析
String 基本实现 初学java经常会误认为String是java基本类型,实际上String并非Java基本类型,String本质上是对char数组的封装. 以下是String实现相关源码 /* ...
- JDK1.8源码(三)——java.lang.String 类
String 类也是java.lang 包下的一个类,算是日常编码中最常用的一个类了,那么本篇博客就来详细的介绍 String 类. 1.String 类的定义 public final class ...
- 深入源码分析Java线程池的实现原理
转载自 深入源码分析Java线程池的实现原理 程序的运行,其本质上,是对系统资源(CPU.内存.磁盘.网络等等)的使用.如何高效的使用这些资源是我们编程优化演进的一个方向.今天说的线程池就是一种对 ...
- 【转】源码分析C++的string实现
转自:源码分析C++的string实现 - 知乎 我们平时使用C++开发过程中或多或少都会使用std::string,但您了解string具体是如何实现的吗,这里程序喵给大家从源码角度分析一下. 读完 ...
- 视频教程-Spring底层源码分析-Java
Spring底层源码分析 鲁班学院-子路老师曾就职于谷歌.天猫电商等多家互联网公司,历任java架构师.研发经理等职位,参与并主导千万级并发电商网站与后端供应链研发体系搭建,多次参与电商大促活动技术保 ...
- 视频教程-RPC服务框架(Dubbo)源码分析-Java
RPC服务框架(Dubbo)源码分析 鲁班学院-子路老师曾就职于谷歌.天猫电商等多家互联网公司,历任java架构师.研发经理等职位,参与并主导千万级并发电商网站与后端供应链研发体系搭建,多次参与电商大 ...
- 【JDK源码】java.lang包常用类详解
接下来的几天开始JDK源码的学习和总结,之前看<java编程思想>的时候看到java的基础知识有很多,其中支撑着这些基础的基础中的基础当属JDK.JDK的基础代码里面又分了很多基础的模块, ...
- java类加载机制为什么双亲委派_[五]类加载机制双亲委派机制 底层代码实现原理 源码分析 java类加载双亲委派机制是如何实现的...
Launcher启动类 本文是双亲委派机制的源码分析部分,类加载机制中的双亲委派模型对于jvm的稳定运行是非常重要的不过源码其实比较简单,接下来简单介绍一下我们先从启动类说起有一个Launcher类 ...
最新文章
- 多个矩形,求覆盖面积,周长,及交点
- linux中sed深入,Linux中的sed
- 软件外包故事 - 加入团队战斗
- Magicodes.WeiChat——媒体资源选择组件之media-choice(开源)
- PGM中置信传递、和—积算法
- 关于序列建模,是时候抛弃RNN和LSTM了
- 十年磨一剑,阿里云RDS MySQL和AWS RDS谁的性能更胜一筹?
- sklearn模型支持输入list吗?
- oracle查询不等于1000,解决oracle查询时 in 大于1000的办法
- 油管机器学习基础 学习笔记
- html 自动字体大小,根据屏幕大小自动修改字体大小的代码
- ADO的七个对象详情解读
- 写给 Linux 初学者的一封信
- 《Python》典型数据结构
- TCP/IP高频考点之一个数据包的流浪日记 - 网络层
- Oracle_Linux of Creation hr user for Oracle 18c oracle 练习的账户(hr user)
- 赛扬N4000和赛扬N5095的区别
- 可雅白兰地koya白兰地:可雅XO白兰地的悠然人生
- Fedora24!到此一游
- 二次函数图像怎么画?
热门文章
- matlab产生mif 文件,生成.mif文件的matlab程序
- python小数乘法_Polymorph:支持几乎所有现有协议的实时网络数据包操作框架
- 需求调研计划_干货!如何做好一个BI项目的规划和需求定义?
- 浏览器打开域名变成localhost_史上最全微信域名防封API原理及实现方案
- 临床医学与计算机考研哪个好考,临床医学考研院校难度概况
- java链表实现_数据结构——基于java的链表实现(真正理解链表这种数据结构)...
- mysql group by join_mysql – GROUP BY之后的LEFT JOIN?
- python斐波那契数列前20项_Python每日一练之实现斐波那契数列
- mysql的原理图解_MySQL排序工作原理
- python断点调试从哪里看数据_Python Pdb 断点调试 - 简明教程