DESKTOP-7HC873M_20200828-李宗宝

问题

1,规范化表示形式(方法)

String t = x.intern();

理解:首先判断x指向的string对象是否存在与字符串池中,如果存在则t直接指向池中的字符串,否则就在字符串池中新建一个String实例,然后t指向池中的string实例

注:

新建一个String实例时,是将x对应的String实例直接添加到字符串池中(将原有的String实例的地址复制到池中)

在创建一个字符串时,只要是双引号(“ ”)中的内容,都是存放在字符串池中

2,

String x = "疑是" ;
String y = "地上霜" ;
String s = "疑是地上霜" ;
        
// StringBuilder builder = new StringBuilder( x ); // 在缓冲区中存放 "疑是"
// builder.append( y ); // 在缓冲区末尾追加 "地上霜"
// String p = builder.toString(); // 将缓冲区中的内容 构造 成 String实例 (即创建新的String实例)
String p = x + y ; // 注意这里的 + 起连接作用(连接字符串)
System.out.println( s == p ); // false
String p = x + y ; // 注意这里的 + 起连接作用(连接字符串)

这里的p是new出来的变量,存放在堆中

@Override
    @HotSpotIntrinsicCandidate
    public String toString() {
        // Create a copy, don't share the array
        return isLatin1() ? StringLatin1.newString(value, 0, count)
                          : StringUTF16.newString(value, 0, count);
    }
    
    public static String newString(byte[] val, int index, int len) {
        if (String.COMPACT_STRINGS) {
            byte[] buf = compress(val, index, len);
            if (buf != null) {
                return new String(buf, LATIN1);
            }
        }
        int last = index + len;
        return new String(Arrays.copyOfRange(val, index << 1, last << 1), UTF16);
    }

心得

稀里糊涂又是一周结束,很累,但也学到很多!!!

标签

© 2021 成都云创动力科技有限公司 蜀ICP备20006351号-1