您的位置:首页 > 其它

3/23学习String源码笔记记录

2018-03-23 17:27 591 查看

1.fileds:

    一、private static final long serialVersionUID = -6849794470754667710L;
            补充知识点:String实现了序列化接口,对于序列化的操作,需要所有补充:
             java序列化操作:
            将对象A->序列化->文本->反序列化->对象B。这个过程中,序列化时会将serialVersionUID写入文本并在反序列化时与提供的类中的UID比较,如果不同,会抛出异常。通常给予默认long值1L。如果A类缺失属性,则B类中补充属性并赋予初始值;如果B类缺失属性则直接丢弃。这里需要注意一点,序列化的目的是为了保存对象的状态,所以静态变量并不在序列化范围之内!(通常可以用序列化优雅的做深克隆)
            还有一点值得一提:如果父类没有实现序列化接口,子类实现,将子类对象序列化,反序列化再输出父类属性会出现偏差,其原因在于构造子类必须先构造父类,而父类没有实现序列化,所以只能构造完给上初始值(数值0,引用null)就放着不管了。同样的transient关键字可以屏蔽不想被序列化的属性,他们被反序列化出来也是初始值。

    二、滞留问题:关于java中的codePoint以及codeUnit(核心卷)
    三、构造方法:
        1.一个值得注意的构造方法:    String(char[] value, boolean share) {
// assert share : "unshared not supported";
this.value = value;
}        value是String类下的一个数组属性,这里采取了直接将数组引用拿来赋值。这样打破了String类是不可变(引用数组一旦改变,两个String都会改变)这个性质。所以被设置为了受保护的方法。关于这个方法,下面还会继续分析。
        2.其余的构造方法,基本都是通过字符数组进行构造,或者对比特数组进行解码(传入字符编码集)。也可以通过传入String,StringBuilder,StringBuffer来构造新的String。
    四、常用方法
        1.比较方法
    public int compareTo(String anotherString)        这个方法需要注意,提供的是根据char的值排序的。所以会出现小写z也比大写A大的情况。具体情况需要写其他方法比较,比如compareToIgnoreCase()这个无视大小写的排序。    public boolean regionMatches(boolean ignoreCase, int toffset,String other, int ooffset, int len)        这个方法传入五个参数,分别是是否区分大小写,当前字符串起始位置t,比较字符串,比较字符串起始位置o,比较长度。返回t,t+l与o,o+l的字符是否匹配。
        2.其他方法
        基本上都是返回一个新的String。这需要注意。
        3.join方法
        可以用来以分隔符连接若干String成为一个新的String。
        4.toCharArray方法的注意点:
        牵扯到一个类加载问题,系统加载时先加载String,后加载Arrays,因此不能再String中用到Arrays工具类,System类可以。
        5.intern方法:
        一定返回从常量池中获取的当前字符串。

            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  学习源码