关于字符串:
所有的字符串都是String类的对象
比较常用的声明字符串的两种方式:
1: String str = "JAva";
2: String str = new String("java");
也就是说,字符串的字面量可以看作是String类的一个对象
这要考虑字符串与字符数组之间的关系:
char ch = {'a','b','c'};
String str = new String(ch);
//以上两条语句可以写为
String str = new String("abc");
//也就是说字符数组作为参量加入到了字符串对象的定义中来了
另外,各种字符串可以以“+“连接,字符串还可以与其他的基本数据类型连接,需要注意,这种情况下连接所得的结果为字符串。
————————————————————————————————————————————————————
关于一些细节:api上说字符串是常量,一旦被赋值,不可以被改变,但是通过一些验证我们得知String引用所指向的字符串对象是可以改变的,这里是不是存在什么矛盾??
简单来说,声明String对象(即创建字符串)时,引用放在栈内存中,对象(字符串)放在堆内存中,各自有着不同的地址。
当我们将原字符串与新字符串连接时,新字符串会成为堆内存中的一个新对象(没有引用),有独立的地址。随后会产生第三个新的对象,该对象的字符内容为连接后的新旧字符串,也有独立的地址
接下来引用与原字符串的引用关系解除,与第三个连接后的字符串建立引用的关系,即引用指向的地址发生了变化。
为什么说“字符串一旦被赋值就不可被更改”呢?其实这里的字符串指的是字符串 对象 而非 引用 关系。事实上,原字符串的地址和内容在上述过程中并没有发生变化。就是说的这个意思。
————————————————————————————————————————————————————
“与其说是矛盾,不如说是误会”
这一点在生活中我确有体会
String 类中有很多方法,将会在下一篇讨论