美文网首页
Java 源代码阅读 CharSequence String C

Java 源代码阅读 CharSequence String C

作者: 小程有话说 | 来源:发表于2017-07-14 22:55 被阅读81次

    开始阅读Java源代码,代码是最好的老师。

    String

    image.png
    String是Java语言中很重要的一个类。

    字符串,Java程序中类似“abc”字符串对象都是该类实例;String是常量,不可变,因此可以被多线程共享。

    # 新建String对象
    String str = "abc"; 
    <-->
    String str = new String({'a', 'b', 'c'});
    

    String类中方法包含检查、比较、查找字符串等各种操作;类型转换通过java.lang.Character实现;Java语言给String提供了很多支持,字符串拼接使用StringBuilder和StringBuffer;String编码格式是UTF-16,更多编码集查看Charset。

    Serializable

    一个类如果要序列化、反序列化需要实现Serializable接口,但是奇怪的是这个接口并没有任何抽象方法。
    为什么需要实现该接口呢,因为在序列化对象时ObjectOutputStream类中writeObject0方法中会对需要进行序列化对象做检测。

                // remaining cases
                if (obj instanceof String) {
                    writeString((String) obj, unshared);
                } else if (cl.isArray()) {
                    writeArray(obj, desc, unshared);
                } else if (obj instanceof Enum) {
                    writeEnum((Enum<?>) obj, desc, unshared);
                } else if (obj instanceof Serializable) { // 所以如果对象没有实现Serializable接口那么序列化直接报错
                    writeOrdinaryObject(obj, desc, unshared);
                } else {
                    if (extendedDebugInfo) {
                        throw new NotSerializableException(
                            cl.getName() + "\n" + debugInfoStack.toString());
                    } else {
                        throw new NotSerializableException(cl.getName());
                    }
                }
    

    Comparable

    对实现它的类提供了排序方法。
    由实现该接口的类的集合或列表可以使用Collections.sort()或Arrays.sort()排序,实现该接口的类可以作为SortedMap、SortedSet的key;compareTo方法和equals是不同的。

    Charset

            Charset utf8 = Charset.forName("UTF-8"); // 使用该方法得到编码集
    

    Charset提供了16位Unicode编码与其他编码的对应关系;我们都知道文件在硬盘中是以UTF-8、GBK、Big5之类的编码格式来存储的,但是Java代码在内存中是以Unicode16来存储的,所以需要建立两者之间的对应关系,这就是Charset的由来。

            ByteBuffer encode = utf8.encode("a");
            CharBuffer decode = utf8.decode(null);
    

    Charset提供的最常用的方法,encode编码后可以存储在文件中;decode解码之后可以供Java代码直接使用。
    在Charset之下,Java提供了各个编码集具体实现。


    image.png

    当我们需要指定编码集时只需要Charset.forName('xxx')然后转换为Unicode编码形式即可。

    CharSequence

    字符序列,这个接口很简单,只有几个方法;

        int length(); // 返回字符串长度(每个字符16位)
        char charAt(int index); // 返回指定位置字符(位置0 ~ length()-1)
        CharSequence subSequence(int start, int end); // end 不能大于length() 返回原字符串的子字符串(起始位置start, 结束位置end)
        public String toString(); // 返回String对象
    

    相关文章

      网友评论

          本文标题:Java 源代码阅读 CharSequence String C

          本文链接:https://www.haomeiwen.com/subject/ukjjhxtx.html