java中的String类

String类:
创建和操作字符串。【创建以后不能改变】, 每一次拼接都会产生新的字符串
1.构建:可以赋空值
String name="下饭";
String[] arr=new String[20];
通过集合的方式构建:
ArrayList<String> strArray=new ArrayList<String>();
2.常用方法:
char=对象名.charAt(int index);//通过下标获取字符串中对应的值
"字符串A".equals("字符串B");//比较两个字符串是否相等  通过内容比较

String a1="susu";
String a2="susu";
System.out.println(a1.equals(a2));//true
String a3= new String("susu");
System.out.println(a1.equals(a3));//true


 indexOf("");//查找参数字符串 在当前字符串中出现的位置   从前往后
lastIndexOf("");
3.正则表达式  (详细见正则表达式详解)
字符串.matches("规则");
 如果字符串满足定义的规则 那么返回true
4.replace(old,new);//拿新的字符串换旧的字符串
5.分割字符串split
String name="n,am,e,sdf";
 String[] split = name.split(",");
 for(String id:split) {
    
     System.out.println(id);
 }
注意:分隔| , + , * , ^ , $ , / , | , [ , ] , ( , ) , - , . 等字符,都要前面加上"\\"
6.subString(beginIndex,endIndex);//返回字符串为该字符串的子字符串


7.StringBuffer
使用缓冲区解决每次拼接都产生新字符串的问题
StringBuffer的对象能够被多次修改,并且不产生新的字符串(线程安全

String StringBuffer StringBuilder区别

1)String 不可变(编译器可以将字符串设为共享的) StringBuffer StringBuilder可变 

(StringBuffer StringBuilder内部维护的是字符数组 每次操作都是改变字符数组的状态,避免创建大量的对象)

2)StringBuffer线程安全,有缓冲区;String是final修饰的类,也是线程安全

3)性能上:一般StringBuilder > StringBuffer > String

String str = "hello"+ "world"的效率就比 StringBuilder st  = new StringBuilder().append("hello").append("world")要高。
4)是否重写了equals 和hashCode

String重写了equals()方法和hashCode()方法,new String("java").equals(new String("java"))的结果为true;

而StringBuffer没有实现equals()方法和hashCode()方法,因此,new StringBuffer("java").equals(new StringBuffer("java"))的结果为false,将StringBuffer对象存储进Java集合类中会出现问题。

 

补充:

==和equals的区别:

== 对于基本数据类型 比较的是数值  对于引用类型的变量,比较的是所指向的对象的地址

equals不能比较基本数据类型 ,比较的是否是同一个对象, 如果像String、Date类有重写,比较的是所指向的对象的内容。(包装器类型一般有重写)

 

8.
 String name=" sdf";
name=name+"df";
 System.out.println(name);//sdfdf
问题:既然String类型字符串不可更改,为什么又能打印出上述结果?
实际上原来的“sdf”字符串已经被丢弃了。

     String a="susu";
     String a1="susu";
     System.out.println(a==a1);//true 同一个对象
     String a2=new String("susu");
     System.out.println(a2==a1);//false 不同对象地址不同
     System.out.println(a2.equals(a));//true 
     String b="susu123";
     String b1=a+"123";
     String b2= a.concat("123");
     System.out.println(b==b1);//false 产生了新对象 利用了StringBuilder.append()方法
     System.out.println(b==b2);//false  产生了新对象 字符串数组的复制数组方法  Arrays.copyOf()方法
     System.out.println(b=="susu"+"123");//true 系统编译期自动优化  自动拼接字符串 指向常量池中的对象
     System.out.println(b.equals(b2));//true

 concat 方法和 + 拼接:

相同点:都可以进行字符串拼接 都会产生新对象

区别:+可以将非string类型转成string 

          + 利用的是stringbuffer的append方法产生了更多对象

 



posted @ 2019-12-01 20:01  下饭  阅读(170)  评论(0编辑  收藏  举报