Core Java Reading Notes
Strings
java的string本质上是unicode字符序列;java没有内置的string类型,java的string类是定义在java标准库里的;
part 1 Substrings
顾名思义,子字符串是从更大的字符串中提取出来的字符串;
String greeting = "Hello";
String s = greeing.substring(0,3);
那么其实字符串提取出来的就是"Hel",很容易理解,字符串从左往右数,从index 0 截取到index 3,包含index 0的元素,但是不包含index 3的元素。左闭右开。
part 2 Concatenation
part2主要讲解java字符串拼接,直接上code进行解释:
String expletive = "Expletive";
String PG13 = "deleted";
String message = expletive + PG13;
那么其实message它所引用的对象就是"Expletivedeleted";当然,当字符串和数值型变量进行凭借,自动转化为字符串;
Part 3 Strings Are Immutable
java的字符串是不可变的,对于字符串的修改,本质是生成新的字符串;但是要注意的是:Java的编译器,能够统筹,使得某些已有的字符串能够共享,减少内存消耗。举个例子,对于某个字符串变量进行一个拷贝,那么拷贝后的变量和被拷贝的变量其实是引用同一个字符串对象;
Part 4 Testing Strings for Equality
这节内容很简单,主要明白字符串的equals方法和==的区别,equals方法比较的是字符串的值,而==比较的是字符串的地址;
Part 5 Empty and Null Strings
字符串为空字符串也就是"",空字符串其实长度为零的字符串对象;但是null string其实是字符串变量没有引用任何字符串对象;
Part 6 Code Points and Code Units
要理解code point和code unit其实很容易,要明白其实计算机表示文本主要把文本映射成数字,再把数字用对应的比特(byte)表示出来。UTF-8或者是UTF-16指的是一种编码方式。把字符映射成数字,这个数字其实成为code point,那么对code point以utf-16的编码方式进行编码。最小的单元是16位,这个16位或者是两个byte称为一个code unit。
Part 7 Building Strings
这个部分主要讲解是,如果通过很多很短的字符串生成大的字符串,那么是相当的浪费时间和内存,因为小字符串形成目标大字符串的过程中,中间会不断生成字符串。可以形象理解为merge sort的merge 过程,所以在merge成大字符串的过程中,每次的拼接都会形成新的字符串,非常浪费资源。那么使用StringBuilder类就可以避免这个问题;show demo code:
StringBuilder builder = new StringBuilder();
builder.append("c");
builder.append("a");
String completedString = builder.toString();
这里的toString(),是把StringBuilder类型转变为String类型;值得注意是,StringBuilder的前继StringBuffer是支持多线程的。
reference: core java volumn 1