JDK8源码之String

今天来看一看JDK8中String的源码,比较简单,这个系列后续就只关注JUC 了。
String内部实际上的存储结构为char数组,实现了Serializable,Comparable等接口,且用final修饰。来看一下String的大致结构

public final String implements Serializable, Comparable<String>, CharSequence {
	char[] value;
	Integer hash; //default to 0
	.........
}

String类呢最主要就是操作这个char数组。来看几个值得注意的方法。

  1. isEmpty():
public boolean isEmpty() {
        return value.length == 0;
   }

一般用不到,因为char[]存的可能全是"",判空一般用StringUtils.isNotBlabk判断
2. equals():

在Object类中,equals方法等价于==,也就是说如果其子类没有重写equals方法,equals也等价于==,不过String类重写了equals方法,主要就是循环去判断char[]的值是否一致,实现比较简单。

  1. replace和replaceAll的区别

replace: 使用字符串去匹配
replaceAll:使用正则表达式去匹配

  1. 其他的方法:

如果返回值是String类型,那么就是使用new String(),
如果返回值是char[],那么使用的就是System.arrayCopy()
有一个比较经典的面试题:String用final修饰的好处?
这其实是一个设计类型的问题了。java语言之父给出的答案是:
1、能够缓存结果。当使用String传参数时,不用担心谁会修改它的值(java仅支持值传递)
2、安全。不管是在应用内部还是在网络中,无论什么类型,我们都是使用String进行传输的,有可能进行一系列的校验和操作后,String内部的值就变了,从而引发异常。如果是final 的话就不用担心这个问题
其实总的来说 就是为了安全。

看完之后感觉对自己的帮助不是很大,所以决定像Integer等比较简单源码以后就不写了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值