字符串(String&StringBuffer&StringBuilder)知识点的总结(含代码)

字符串(String&StringBuffer&StringBuilder)知识点的总结(含代码)

1、字符串常用赋值:
    1)利用双引号引用字符串常量
    2)利用构造方法来直接实例化String类型的变量
    3)利用字符数组实例化  字符数组--->String
2、字符串的拼接(+,+=,concat())
   碰到字符串后直接输出后面的内容;
   碰到字符串前,先做运算,后输出内容;
   碰到大括号,先运算大括号中的值,后输出内容
3、字符串的缓冲区(常量池)
   当定义字符串的时候,首先会先去字符串常量池中查找是否有该字符串的对象,如果有就直接引用,如果没有就会创建对象
4、字符串的相关方法
5、String类型:  不能改变的字符序列
  StringBuffer: 可以改变的字符序列
  StringBuilder:可以改变的字符序列

类名       String     StringBuilder    StringBuffer(排队,同步)
对象类型   字符串常量    字符串变量        字符串变量
线程安全性  不安全       不安全           安全
执行效率     低         高               中

操作小,数据少,用String
单线程,操作多,数据多,用StringBuilder
多线程,操作多,数据多,用Stringbuffer

1 字符串赋值的方法

   //1、利用双引号引用字符串常量
   String str = "好好学习";
   //2、利用构造方法来直接实例化String类型的变量
   String str1 = new String("天天向上");
   //3、利用字符数组实例化  字符数组--->String
   char[] chs = {'j','a','v','a'};
   String str2 = new String(chs);

2 字符串拼接

    //字符串的拼接(+,+=,concat())
    String str3 = str+"abc"; //结果:好好学习abc
    String str4 = str.concat("abc"); //结果:好好学习abc
//注意:
String a = "1"+2+3+4;//1234 碰到字符串后直接输出后面的内容
String b = 1+2+3+"4";//64 碰到字符串之前先做运算,后输出内容
String c = "1"+(2+3+4);//19 碰到大括号,先运算大括号中的值,后输出内容
System.out.println("a:"+a);
System.out.println("b:"+a);
System.out.println("c:"+a);

3 字符串缓冲区(常量池)

​ 在jdk1.7之前,字符串常量池是在方法区中
​ 在jdk1.8之后,字符串常量池是在堆中
​ 字符串常量池:
​ 当定义字符串的时候,首先会去字符串常量池中查找是否有该字符串对象
​ 如果有,就字节引用,如果没有才创建对象

    //字符串的缓冲区(常量池)
    String s1 = "abc";
    String s2 = "abc";
    String s3 = s1;
    System.out.println(s1 == s2); //true
    System.out.println(s2 == s3); //true
    /**
    *  ==: 作用在基本数据类型,比较的就是数值
    *  ==: 作用在引用数据类型,比较的就是地址
    */

比较字符串是否相等

String name = new String("tom");
String dbName = new String("tom");
System.out.println(name == dbname);//false
System.out.println(name.equals(dbName));//true

String name1 = "tom";
String dbName1 = "tom";
System.out.println(name == dbName1);//ture
System.out.println(name.equals(dbName1));//ture

String e = "Hello";
String f = new String("World");
String str1 = e + f;
String str2 = "Hello"+"World";
String str3 = "HelloWorld";
System.out.println(str1 == str2);//false
System.out.println(str2 == str3);//ture
System.out.println(str1.equals(str2));//true 比较两者的内容

在这里插入图片描述

4 字符串的相关方法

	String name = "我欲乘风归去,乘风归去~";
    //获取数组长度 length属性
    //获取集合长度 size()方法
    //获取字符串长度 length()方法
    System.out.println("长度为:"+name.length);
    //获取指定位置上的字符  charAt()
    System.out.println(name.charAt(1));
    System.out.println(name.charAt(name.length-1));
    //获取字符串第一次出现位置的下标  indexOf()
    System.out.println(name.indexOf("乘风"));//2
    //从指定字符串开始查询
    System.out.println(name.indexOf("乘风",4));//7
    System.out.println(name.lastIndexOf("乘风"));//7
    System.out.println(name.listIndexOf("乘风",6));//2
    //判断字符串的首位内容
    System.out.println(name.startsWith("我"));//true
    System.out.println(name.endsWith("去"));//false
    //获取字符数组:字符串--->字符数组
    char[] chs = name.toCharArray();
    System.out.println(Arrays.toString(chs));
    //字符数组--->String
    char[] chss = {'j','a','v','a'};
    String str2 = new String(chss);
    //判断字符是否存在
    System.out.println(name.contains("琼楼"));//false
    System.out.println(name.indexOf("琼楼"));//-1
    //截取字符串
    System.out.println(name.substring(5));//去,乘风归去~
    System.out.println(name.startsWith(5,11));//去,乘风归去
    //大小写转化
    String pwd = "Zero";
    String dbPwd = "ZEro"
    System.out.println(pwd.toUpperCase());//全部转换为大写
    System.out.println(pwd.toLowerCase());//全部转换为小写
    //比较字符串是否相等
    System.out.println(pwd.equals(dbPwd));//false    
   System.out.println(pwd.equalslgnoreCase(dbPwd));//ture
    //去除空白  trim():去除首尾空格
    String id = "  123  321  ";
    System.out.println(id.trim());
    //去除所有空格   "\\s":正则表达式
    System.out.println(id.replaceAll("\\s",""));
    

5 String&StringBuffer&StringBuilder的比较

String:不能改变的字符序列
StringBuffer:可以改变的字符序列

5.1 StringBuffer常用方法

	StringBuffer sbf = new StringBuffer("门前大桥下");
	sbf.append("游过一群鸭");
    System.out.println(sbf);
    //插入字符串  insert()
    System.out.println(sbf.insert(5,"石头"));
    System.out.println(sbf);
    //其他方法和String类似
    //charAt(index)
    //indexOf(str)
    //subString()

5.2 三者之间的相互转换

    //三者时间相互转换
    //String--->StringBuffer/StringBuilder
    String str = "张三";
    StringBuffer sbf1 = new StringBuffer(str);
    System.out.println(sbf1.getClass);//查看变量类型
    //StringBuffer/StringBuilder--->String
    String str1 = sbf1.toString();

	//StringBuffer和StringBuilder互转
	    //1、StringBuffer--->String 
	    //2、String--->Stringbuilder

5.3 三者之间的区别

类名StringStringBuilder(卡车)StringBuffer(排队上公交,同步)
对象类型字符串常量字符串变量字符串变量
线程安全性不安全不安全安全
执行效率
  • 操作少,数据少,用String
  • 单线程,操作多,数据多,用StringBuilder
  • 多线程,操作多,数据多,用StringBuffer
public class StringDemo03{
    //比较String\StringBuffer\StringBuilder的执行效率
    public static void mian(String[] args){
        String str = "";
        //1、获取当前系统时间的毫秒数
        long startTime = System.currentTimeMillis();
     	for(int i=0;i<10000;i++){
            str += i;
        }
        //获取结束时的毫秒数
        long endTime = System.currentTimeMillis();
  System.out.println("String消耗的时间:"+(endTime-startTime));
        
        StringBuilder sbd = new StringBuilder();
        //2、获取当前系统时间的毫秒数
        long startTime1 = System.currentTimeMillis();
     	for(int i=0;i<10000;i++){
            sbd += i;
        }
        long endTime1 = System.currentTimeMillis();
System.out.println("String消耗的时间:"+(endTime1-startTime1));
        
        StringBuffer sbf = new StringBuffer();
        //3、获取当前系统时间的毫秒数
        long startTime2 = System.currentTimeMillis();
     	for(int i=0;i<10000;i++){
            sbf += i;
        }
        long endTime2 = System.currentTimeMillis();
System.out.println("String消耗的时间:"+(endTime2-startTime2));
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值