目录
String
String概述
- 字符串内容不会发生改变,对象创建之后不能被更改。
- 字符串拼接产生一个新的字符串
// 这种情况是创建了一个新的字符串并赋值给name,整个过程共创建了2个字符串
String name = "尼古拉斯·阿玮";
name = "三连加投币.阿玮";
1.Strin是Java定义好的一个类。定义在java.lang包中,所以使用的时候不需要导包。
2.Java程序中的所有字符串文字(例如“abcdefg")都被实为此类的对象。
3.字符串不可变,它们的值在创建后不能被更改
创建String对象的两种方式
// 直接赋值
String s1="abc";
// 传递一个字符数组,根据字符数组的内容再创建一个新的字符串对象
char[]chs={'a',‘b','c",'d"};
String s4=new String(chs);
// 传递一个字节数组,根城字节数组的内容再创建一个新的字符串对象
// 应用场场景:以后在网格当中传输的数据其卖都是字节信息
// 我们一般要把字节信息进行转换,转成字行串,此时就要用到这个构造了。
byte[]bytes={97,98,99,100};
String s5=new String(bytes);
System.out.printin(s5);//abcd
字符串常量池
只有直接赋值获得的String对象存于此。
如下图,要给s2赋值回去串池中观察,这个字符串已经存在了,就会直接复用已经有的存在。
而如下图所示,手动new出来的,要从堆内存的数组中找到元素,在堆内存中创建一个新的小空间存储字符串,这种就没法复用。
字符串常用方法
字符串的比较
如下图,第一行两个比较结果为true和false,第一个图中因为采用了复用,所以地址值相同,所以值为true,第三个图因为一个是直接赋值,一个是new出来的,地址不同,结果为false
注意
要记住“==”比较的情况在不同数据类型上有区别!!!
很多情况下“==”不适合string的比较,要比较字符串对象中的内容是否相同?以及是否忽略大小写?请参考下图
其他方法总结
StringBuilder
StringBuilder概述
- StringBuilder 可以看成是一个容器,创建之后里面的内容是可变的。所以一般的用处是用此对象当作一种工具来操纵字符串,用完之后将操作完的内容tostring()就变为字符串了
- Java对StringBuilder做过特殊处理,其打印对象不是地址值而是属性值
- 作用:提高字符串的操作效率
- (由于String对象内容不可改变,所以直接用s1+s2+s3+s4+s5会在中间创建很多对象,占用内存,效率不高)
StringBuilder构造方法
StringBuilder常用方法
StringJoiner
- Stringjoiner跟StringBuilder一样,也可以看成是一个容器,创建之后里面的内容是可变的。
- 作用:提高字符串的操作效率,而且代码编写特别简洁,但是目前市场上很少有人用。
- JDK8出现的
StringJoiner的构造方法
下图中黄色部分是指定间隔符号,或同时指定间隔符号和开始结束符号的示例代码,绿字是会输出的结果: