前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >jdk源码系列:String为啥是不能有子类?以及内内部实现

jdk源码系列:String为啥是不能有子类?以及内内部实现

作者头像
爱明依
发布2019-04-27 20:56:10
5030
发布2019-04-27 20:56:10
举报
文章被收录于专栏:爱明依爱明依

版权声明:欢迎关注博主公众号:矿洞程序员 https://blog.csdn.net/qq_32423845/article/details/89336320

代码语言:javascript
复制
public final class String implements java.io.Serializable,Comparaable<String>,CharSequence{
	
	private final char value[];
	
	private int hash;
	
	private static final long serialVersionUID=-6849794470754667710L;
	
	private static final ObjectStreamField[] serialPersistentField=new ObjectStreamField();

如上图所示,String 类声明为final ,所以不能有子类。有个核心全局变量 char value[]  整个字符串的操作基本围绕其展开。

构造器提供了好多。如下图:

代码语言:javascript
复制
public String(){
		this.value="".value;
	}
	public String(String original){
		this.value=original.value;
		this.hash=original.hash;
	}
	
	public String(char value[]){
		this.value=Arrays.copyOf(value,value.length);
	}
	
	public String(char value[],int offset,int count){
		if(offset<0){
			throw new StringIndexOutBoundsException(offset);
		}
		if(count<=0){
			if(count<0){
				throw new StringIndexOutOfBoundsException(count);
			}
			if(offset<=value.length){
				this.value="".value;
				return;
			}
		}
		//Note:offset or count might be -1>>>1
		if(offset>value.length-count){
			throw new StringIndexOutBoundsException(offset+count);
		}
		this.value=Arrays.copyOfRange(value,offset,offset+count);
	}

只是列举了一部分。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019年04月16日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档