String对象不可变。对字符串进行的操作都是重新创建了一个新的string对象。
将一个string对象传入某个方法中,实际是传入了一个string对象的引用。
string是由final修饰的类
java中 +,+=是仅有的两个重载的操作符,像普通的重载一样,面对不用的语境(比如int,string)有不同的作用。
“abc” + "def" 底层会自动的引入string builder类。在源码中并没有使用string builder,但是编译器为了提高效率会自动引入使用。但是在创建复制string(比如通过多次循环拼接生成string对象,整个底层会创建多个string builder对象),为提高程序效率可以直接创建一个string builder对象,更进一步可以估计最终字符串大小预先指定string builder大小。
java中存在一种无意识的递归。创建一个新的数据类型,重写父类object的tostring方法(期望通过this关键字)输出此对象的内存地址。打印时编译器会this转换成字符串,会调用this上的tostring方法(),产出一种递归调用。