jdk阅读day4-Character&String

本文深入探讨了Java中的字符串处理技术,包括Character类的使用、Surrogate对Unicode字符的支持、String、StringBuffer与StringBuilder的区别,以及字符串操作方法如toLowerCase、toUpperCase、substring和subSequence的实现原理。

 前言:关于codepoint:https://www.jianshu.com/p/235ad9c63cf2

  一 ,Character

  1.为啥 这里要先变成字符数组?不直接把value传进去?

    public String toString() {
        char buf[] = {value};
        return String.valueOf(buf);
    }

    2.Surrogate是什么?

详见回答:https://www.zhihu.com/question/42176549

    3.这个方法不懂是什么意思

    public static int offsetByCodePoints(char[] a, int start, int count,
                                         int index, int codePointOffset) {
        if (count > a.length-start || start < 0 || count < 0
            || index < start || index > start+count) {
            throw new IndexOutOfBoundsException();
        }
        return offsetByCodePointsImpl(a, start, count, index, codePointOffset);
    }

 4.看不懂这个方法的作用,在网上搜到了一篇解释

地址:https://blog.csdn.net/asdfsadfasdfsa/article/details/78737656

    public static char forDigit(int digit, int radix) {
        if ((digit >= radix) || (digit < 0)) {
            return '\0';
        }
        if ((radix < Character.MIN_RADIX) || (radix > Character.MAX_RADIX)) {
            return '\0';
        }
        if (digit < 10) {
            return (char)('0' + digit);
        }
        return (char)('a' - 10 + digit);
    }

 

    public static byte getDirectionality(char ch) {
        return getDirectionality((int)ch);
    }

5.Character里面有几个内部类,好像是用来存储特定字符集以及对特定字符集的一些方法?

 二,String

 1.CaseInsensitiveComparator的设计

  详见:https://bbs.csdn.net/topics/391982434(最后一个回答可作参考)

 

 2.Stringbuffer、Stringbuilder、String

    public String(StringBuffer buffer) {
        synchronized(buffer) {
            this.value = Arrays.copyOf(buffer.getValue(), buffer.length());
        }
    }

  从这里发现,它们的区别分别是,String为不可变的,而StringBuffer,Stringbuilder是可变的;而StringBuffer和builder的区别,在于Stringbuffer是线程安全的,builder则不是,但是由于去掉了锁的操作,故builder性能更好一些。

 3.subString和subSequence

    public CharSequence subSequence(int beginIndex, int endIndex) {
        return this.substring(beginIndex, endIndex);
    }

  两个方法是一样的,JDK文档中写着是因为要实现CharSequence接口,故这个方法要放在这里。

 5.join()方法底层是用Stringbuilder实现的。

6.toLowerCase()和toUperCase(),在codepoint层面上进行转换的,实现细节没看懂。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值