string 长度_String源码详细解析

3ede22dee938060c2b8d09e133d453d0.png

本章源码分析基于JDK1.7

实现的接口

String类被final修饰词修饰,代表不可修改的特性,它实现了三个接口,Serializable是序列化接口,Compareble是排序接口,Char是字符序列接口。

a83aa65d5fb8a14a6bf4e9b894d36471.png

主要成员变量

char[]:String通过char[]来实现String的各种功能,字符串由字符数组实现。

hash:用于缓存hash值,因为String类是final不可修改的,所以hash值也是固定的,为了避免重复计算hash值而缓存。

CASE_INSENSITIVE_ORDER:排序器,由上可知String类实现了Compareble接口,这里的Comparator用于忽视大小写的字符串的比较。

b6f0ed01d979a81e125ab9ef3ef108bd.png

构造函数

String共有15个重载构造函数,入参这几种:空、char[]、String、StringBuffer、StringBuilder、byte[],通过这些来构造字符串对象。

f95dceb6e0f15b1e8ffd2561ab7d1822.png

length方法

通过获取char[]的长度来获取字符串的长度

23180efb1dbc1a00b6ebe463a3fed1a3.png

isEmpty方法

通过判断char[]的长度是否为0来判断是否为空

cd7c17c6a449200136950d543cb99eff.png

charAt方法

通过char[]数组下标获取到对应位置的char字符

e0d16aea837c0ffdad2e389581426428.png

equals方法

首先比较内存地址,再判断是否是String类型,然后再判断长度,最后逐个比较其中的char。

7560ede1fdfc579aa65ae229d801928b.png

hashCode方法

这里的hash值计算有个特点,就是String内部缓存了hash值,如果hash值不为0则直接返回,不需要再次进行计算,因为String是被final修饰的,它不会被修改,所以没有必要每次都重新计算hash值。

c35455136ef8512ce55e037e298ab44a.png

compareTo方法

通过两个字符串的第一个不一样的字符来比较大小并返回结果,若两个字符串的字符都一样则比较两个字符串的长度。

eb114eb1679cfb60268e006baf02cf6d.png
原作者姓名:呆某人
原出处:CSDN
原文链接:String源码解析_w8827130的博客-CSDN博客
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值