一、Java中字符串的不变性
String对象创建后则不能修改,是不可变得,所谓的修改其实是创建了新的对象,所指向的内存空间不同。如图所示:
![](https://img.haomeiwen.com/i9676452/1be0ed1e8c1d6b84.png)
运行结果:
![](https://img.haomeiwen.com/i9676452/689b1599f8cb6683.png)
总结:
1.通过String s1="爱慕课",声明了一个字符串对象,s1存放了到字符串的引用,在内存中的存放引用关系如图所示:
![](https://img.haomeiwen.com/i9676452/ef876d679f505298.png)
然后通过s1="欢迎来到:"+s1;改变了字符串s1,其实质是创建了一个新的字符串对象,变量s1指向了新创建的字符串对象,如下图所示:
![](https://img.haomeiwen.com/i9676452/17015c1fd23070d8.png)
2.一旦一个字符串在内存中创建,则这个字符串将不可改变。如果需要一个可以改变的字符串,我们可以通过使用StringBuffer或者StringBuilder.
3.每次new一个字符串就是产生一个新的对象,即使两个字符串的内容相同,使用"=="比较时也为"false",如果需要比较内容是否相容,应使用"equals()"方法。
二、Java中String类的常用方法
String类的常用方法:
![](https://img.haomeiwen.com/i9676452/0d6321b0d9c2b099.png)
结合代码熟悉下方法的使用:
![](https://img.haomeiwen.com/i9676452/f7e3a93ed3328885.png)
运行结果:
![](https://img.haomeiwen.com/i9676452/ffbdaccdc2460ecb.png)
注意:
1.字符串str中的字符的索引从0开始,范围为0到str.length()-1;
2.使用indexOf进行字符串或字符串的查找时,如果匹配返回位置索引;如果没有匹配结果,返回-1;
3.使用substring(beginIndex,endIndex)进行字符串截取时,包括beginIndex位置的字符,不包括endIndex位置的字符。
实例二:
![](https://img.haomeiwen.com/i9676452/67de9109de67241b.png)
运行结果:
![](https://img.haomeiwen.com/i9676452/6f019c1df9f803cd.png)
注意:
"=="和equals()有什么区别呢:
==:判断两个字符串在内存中的首地址是否相同,即是否是同一个字符串对象
equals:比较存储在两个字符串对象中的内容是否一致
三、Java中的String Builder类的常用方法
![](https://img.haomeiwen.com/i9676452/c0283c1b518a47d3.png)
例如:在下面的实例代码中,创建了String Builder对象,用来存储字符串,并对其进行追加和插入操作,这些操作修改了str对象的值,而没有创建新的对象,这就是String Builder和String的最大的区别
![](https://img.haomeiwen.com/i9676452/89e99df80a3be6db.png)
运行结果:
![](https://img.haomeiwen.com/i9676452/30ca7b3134a64694.png)
网友评论