java字符串判等及StringBuffer/StringBuilder的常用方法

字符串判等

在这里插入图片描述
1.String str1 = “Hello”,str2 = “Hello”;
System.out.println(str1==str2);//ture

2.String str1 = new String(“Hello”),str2 = new String(“Hello”);
System.out.println(str1==str2);//false

3.String str1 = new String(“Hello”).intern();
String str2 = “Hello”;
System.out.println(str1==str2);//ture

在java堆中有一块叫常量池的区域,不用字符串new生成的时候会直接放在这里。而new的时候先会在常量池中存放,再新开辟一块区域。
“==”对基本类型比较是直接比较值,而对引用类型则会比较地址。1中比较的是常量池中地址,2中则比较新开辟的地址
3中str1调用intern()函数指向的是常量池的地址故结果相等。

4.String str1 = new String(“hello”);
String str2 = “hello”;
str1.intern();
System.out.println(str1==str2);//false
intern的时候会先寻找是否存在引用指向该常量,如果不存在才会将该引用指向常量。所以4中的intern就是一句废话。intern的目的节约内存空间

5.String str = “helloworld”;
String str1 = “hello”+“world”;
System.out.println(str1==str2);//ture

6.String str = “helloworld”;
String str1 = “hello”;
String str2 = str1+“world”;
System.out.println(str==str2);//false
//6中先new 一个StringBudder给StringBudder对象append(“hello”)
在append(“world”)最后在toString()被str2接收。

StringBuilder&StringBuffer

在这里插入图片描述
long begin = System.currentTimeMillis();
//do some thing…
long end = System.currentTimeMillis();
System.out.println(end-begin);

从底层来看二者的实现是差不多的,时间测试来说StringBuilder更快,但是StringBuffer中包含关键字synchronized会使线程执行同步,故支持高并发。

String常见方法

charAt(int index)//得到元素
indexOf(String str)//得到下标(第一个)
contains(CharSquence c)//得到布尔值
spilt(String regex)//分成字符串数组
replaceAll(String regex,String replacement)//把正则表达式换成目标字符串
replace(char oldchar, char newchar)//更换字符串中的数组/字符
cancat(String str)//连接并返回该数组副本
tirm()//删除两端空格转行制表等符号
codePointCount(int beginIndex, int endIndex)//求长度但不同于length()该方法求的是Unicode的长度(侧面印证java支持更多语言通用性好)

stringBuffer与StringBuilder
append(Object obj)//给字符串后添加~返回并String

猜你喜欢

转载自blog.csdn.net/qq_43313769/article/details/83187349