String、StringBuffer及StringBuilder详讲

String字符串

字符串的定义
定义

  • 字符串是一个字符序列,例如:“Hello”字符串,必须包含在一对双引号当中;
  • 不是一个基本数据类型,是一个引用类型(类)
  • 字符串是一个不可变类型(Immutable)
  • 一经创建不可修改

构造方法

  • public String()
  • public String(String original)
  • public String(char[] value)
  • public String(byte[] bytes)
  • 实例
  • StringConstructorTest.java

注:声明的字符串变量必须经过初始化才能使用,否则编译器会报“变量未被初始化错误”;java中一句相连的字符串不能分开两行来写,除非用”+”来连接;

**

来来来~~~直接上代码

**
代码GTQ28已经做了一些笔记,请认真分析。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

练一练

public class test {
    
    

	public static void main(String[] args) {
    
    
		String s1="北京";
		String s2="中国首都";
		
		String s3="北京中国首都";
		
		String s4=s1+"中国首都";
		String s5="北京"+s2;
		
		String s6=s1+s2;
		
		String s7="北京"+"中国首都";

		final String s8="北京";

		String s9=s8+"中国首都";
		
		System.out.println(s3 == s4);
		System.out.println(s3 == s5);
		System.out.println(s3 == s6);
		System.out.println(s4 == s5);
		System.out.println(s5 == s6);
		System.out.println(s6 == s7);
		System.out.println(s3 == s7);
		System.out.println(s3 == s9);

	}

}

答案:
false
false
false
false
false
false
true
true

上面的题目自己能够一个不错的做出来,而且能说出每个的答案的来由,那你对字符串的“一经创建,不可修改”这一概念的理解就算过关了。那我们继续往下学习吧…

常用方法

取字符串的长度

  • length()

取某个索引位置上的字符

  • charAt(int index);

子字符串

  • substring(4);从指定位置截取到末尾;

  • substring(0,4);指定开始位置和结束位置,包含前面的索引,不包含后面的索引;

字符串连接

  • “+”:不仅可以连接两个字符串,同时也可以连接 其他基本数据类型,这时会将这些数据类型直接转换为 字符串;例如:String str = “1+2”;输出字符串str,得到 的结果就是:1+2,而不会是3;

字符串的编码转换
在这里插入图片描述

StringTokenizer工具类

解析字符串工具类StringTokenizer

  • StringTokenizer 是一个解析字符串的工具类,
    根据指定的分隔符分隔指定的字符串;实例:NewStringDemo.java

在这里插入图片描述

StringBuffer和StringBuilder

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

三者的区别

StringBuffer和StringBuilder的区别

  • 程序是在单线程下运行,或者是不必考虑到线程同步问题,我们应该优先使用StringBuilder类,执行效率更高;如果要保证线程安全,自然就选择StringBuffer。
  • 注:StringBuilder相对Stringbuffer的效率要高,工作中推荐使用它,线程不安全会有安全隐患吗?不会,线程安全问题应该交给程序本身来控制,而不是交给工具类来完成。

String和StringBuffer和StringBuilder的区别

  • StringBuffer、StringBuilder和String一样,也用来代表字符串。
  • String类是不可变类,任何对String的改变都会引发新的String对象的生成;
  • StringBuffer则是可变类,任何对它所指代的字符串的改变都不会产生新的对象。
  • StringBuffer和StringBuilder类的区别也是如此,它们的原理和操作基本相同,区别在于StringBuffer支持并发操作,线性安全的,适合多线程中使用。
  • StringBuilder不支持并发操作,线性不安全的,不适合多线程中使用。
  • 新引入的StringBuilder类不是线程安全的,但其在单线程中的性能比StringBuffer高。

三者的效率测试代码

public static void main(String[] args) {
    
    
		//测试String、StringBufeer和StringBuilder三者的效率
		String s1=new String();
		long starTime = System.currentTimeMillis();
		for(int i=0;i<50000;i++) {
    
    
			s1+=i;
		}
		long endTime = System.currentTimeMillis();
		System.out.println("String总运行时间:"+(endTime-starTime));
		
		
		StringBuffer sf=new StringBuffer();
		starTime = System.currentTimeMillis();
		for(int i=0;i<50000;i++) {
    
    
			sf.append(i);
		}
		endTime = System.currentTimeMillis();
		System.out.println("StringBuffer总运行时间:"+(endTime-starTime));
		
		StringBuilder sd=new StringBuilder();
		starTime = System.currentTimeMillis();
		for(int i=0;i<50000;i++) {
    
    
			sd.append(i);
		}
		endTime = System.currentTimeMillis();
		System.out.println("StringBuilder总运行时间:"+(endTime-starTime));
		
	}

答案:

String总运行时间:6328
StringBuffer总运行时间:5
StringBuilder总运行时间:3

理解

在这里插入图片描述

其他

其他:String.format(“%.2f”,num);保留两位小数

结束语

谢谢

猜你喜欢

转载自blog.csdn.net/zhangzhanbin/article/details/111499427
今日推荐