当前位置: 首页 > news >正文

JavaAPI-String和StringBuffer

目录

一、String的概述

二、String的特点

三、面试题

四、String和StringBuffer的拼接性能测试

五、String常用的方法

六、字符串和数组中哪个是length属性,哪个是length方法

七、StringBuffer的常用方法

八、StringBuilder


一、String的概述

1.String是一个类,可以new对象

String str = new String("HelloWorld");
System.out.println(str);//HelloWorld

二、String的特点

1.不变性

2.不变性代表的是在String的变量中会存储的一个值,这个值的本身是不会变的

String s1 = "a"; // 不变性代表 s1指向的地址是会改变的,但是a是不会变的

三、面试题

1.直接赋值,下面的结果为true还false

String s1 = "abc";
String s2 = "abc";
System.out.println(s1.equals(s2)); // true
System.out.println(s1 == s2); // true 因为s1和s2是指向相同的地址,所以这里的几个为true

2.new对象,下面的结果为true还false

String s1 = new String("abc");
String s2 = new String("abc");
System.out.println(s1 == s2); // false 因为==比较的是地址,而s1和s2是new了两个对象,地址是不同的,所以为false
System.out.println(s1.equals(s2)); // true equals比较的是内容,s1和s2的内容相同,所以为true

3.相加,下面的结果是true和false

String s1 = "a";
String s2 = "b";
System.out.println(s1 + s2 == "ab"); // false ==右边的ab会直接存放到常量池中,而左边会在运行期的时候用一个a的副本在加上b得到另一个ab,此时常量池中会有两个ab,这两个ab的地址是不同的,所以为false
final String s3 = "a";
String s4 = "b";
System.out.println(s3 + s4 == "ab"); // false
final String s5 = "a";
final String s6 = "b";
System.out.println(s5 + s6 == "ab"); // true 用final修饰变量,变量会变为常量,常量的值是不能更改的,所以s5和s6相加的值在编译期的时候就可以直接确定下来然后放在常量池中,这时候常量池中就只会有一个ab,比较的时候就会为true

4.总结

(1)== 比较的是对象的地址

(2)equals比较的是对象的内容(仅限于String中)

(3)String 在编译期如果能确定,那么就在常量池中直接操作

四、String和StringBuffer的拼接性能测试

1.获取当前系统的毫秒数:System.currentTimeMillis()

2.String

String s = "";
long start = System.currentTimeMillis();
for(int i = 0;i < 100000;i++){// 拼接了十万次字符串s += i;
}
long end = System.currentTimeMillis();
System.out.println(end - start); // 24771 24秒 1秒=1000毫秒

3.StringBuffer

StringBuffer sb = new StringBuffer();
long start = System.currentTimeMillis();
for(int i = 0;i < 50000000;i++){// 拼接了五千万次字符串sb.append(i);
}
long end = System.currentTimeMillis();
System.out.println(end - start); // 1553 1.5秒 1秒=1000毫秒

五、String常用的方法

1.compareTo():比较字符串的大小(返回的是ASCII差值,如果相同返回长度差)

String s1 = "abcdefg.TXT";
System.out.println(s1.compareTo("abc"));

2.equals():比较字符中的内容是否相同

String s1 = "abcdefg.TXT";
System.out.println(s1.equals("abc"));

3.charAt():返回的是对应索引所在的字符

String s1 = "abcdefg.TXT";
System.out.println(s1.charAt(3));

4.indexOf():返回字符所在位置的索引,如果没有找到,则返回-1

String s1 = "abcdefg.TXT";
System.out.println(s1.indexOf(99)); // 2
System.out.println(s1.indexOf("de")); // 3
System.out.println(s1.indexOf("dd")); // -1
System.out.println(s1.indexOf("c",5)); // -1

5.valueOf():将其他类型转换为String类型

(1)valueOf是静态方法,通过类名直接调用

String.valueOf(123);

6.substring():截取字符串

(1)左闭右开

String s1 = "abcdefg.TXT";
System.out.println(s1.substring(2,4)); // cd

7.replace():替换字符串

String s1 = "abcdefg.TXT";
System.out.println(s1.replace("c","ccc"));

8.endsWith():判断是不是以XXX结尾,返回值为boolean类型

String s1 = "abcdefg.TXT";
System.out.println(s1.endsWith(".TXT")); // true

9.startsWith():判断是不是以XXX开头,返回值为boolean类型

String s1 = "abcdefg.TXT";
System.out.println(s1.startsWith("abb")); // false

10.toUpperCase():将字符串全部转换为大写

String s1 = "abcdefg.TXT";
System.out.println(s1.toUpperCase());

11.toLowerCase():将字符串全部转换为小写

String s1 = "abcdefg.TXT";
System.out.println(s1.toLowerCase());

12.length():获取字符串的长度

String s1 = "abcdefg.TXT";
System.out.println(s1.length());

13.注意:String中的操作都不会改变原字符串

六、字符串和数组中哪个是length属性,哪个是length方法

1.字符串中的是length方法,数组中的是length属性

七、StringBuffer的常用方法

1.length():获取长度

StringBuffer sb = new StringBuffer("abc");
System.out.println(sb.length());

2.capacity():容量

(1)容量只会在初始化或者是不够的情况下才会改变

StringBuffer sb = new StringBuffer("abc");
System.out.println(sb.capacity()); // 容量默认为16  +3为19
// 容量在超出后会增加  
System.out.println(sb.append("1234567890aaabbbn"));
System.out.println(sb.length());
System.out.println(sb.capacity()); // 40
sb.append("1234567890aaabbbcccddd");
System.out.println(sb.length());
System.out.println(sb.capacity()); // 82
// 容量的增加规则为:(容量 + 1)* 2

3.trimToSize():将容量调整为长度的大小

StringBuffer sb = new StringBuffer("abc");
sb.trimToSize();
System.out.println(sb.length()); // 3
System.out.println(sb.capacity()); // 3

4.delete():删除固定的某一段字符

StringBuffer sb = new StringBuffer("abcdefg");
sb.delete(2,4);
System.out.println(sb);

5.append():拼接字符

StringBuffer sb = new StringBuffer("abcdefg");
sb.append(3,"bb");
System.out.println(sb);

6.insert():插入字符

StringBuffer sb = new StringBuffer("abcdefg");
sb.insert(3,"bb");
System.out.println(sb);

7.reverse():反转

StringBuffer sb = new StringBuffer("abcdefg");
sb.reverse();
System.out.println(sb);

8.setCharAt():改变指定位置的字符

StringBuffer sb = new StringBuffer("abcdefg");
sb.setCharAt(3,'g');
System.out.println(sb);

9.注意:StringBuffer中的操作会改变原字符串

10.StringBuffer中的方法有一些是和String中的方法是一样的

八、StringBuilder

1.StringBuffer和StringBuilder的区别

(1)StringBuffer中的方法比StringBuilder中的方法多了一个关键字:synchronized

  • synchronized:同步
  • 同步代表更安全了,但是效率就变低了

(2)所以说,StringBuffer要比StringBuilder安全;但是性能要比StringBuilder低

(3)而StringBuilder要比StringBuffer性能高;但是安全性就相对会下降一些

(4)StringBuilder中的方法基本上和StringBuffer是一样的


http://www.mrgr.cn/news/30054.html

相关文章:

  • 线性表-数组描述补充 迭代器(C++)
  • FPGA实现PCIE3.0视频采集转SDI输出,基于XDMA+GS2971架构,提供工程源码和技术支持
  • Oracle 外键
  • uni-app表格带分页,后端处理过每页显示多少条
  • netcat工具安装和使用
  • docker容器启动报错error creating overlay mount to /var/lib/docker/overlay2解决办法
  • 【AI大模型】LLM主流开源大模型介绍
  • 网络安全自学笔记
  • iOS17找不到developer mode
  • # 软考 -- 软件设计师 -- 二轮复习(5) -- 面向对象(持续更新)
  • 记软件开发者画图(UML),使用WPS应用制图
  • 【人工智能】如何利用AI高效解决Linux中出现的严重问题?程序员必看小技巧!
  • 【C++笔记】八、结构体 [ 1 ]
  • Linux StableDiffusion下载外网插件失败, 自己下载安装
  • 如何做好一个网站建设的规划?
  • 图神经网络模型的应用(8)--1
  • CST电磁仿真77GHz汽车雷达保险杠
  • springboot篮球球队管理系统-计算机毕业设计源码97090
  • HY007必填字段为null 导致 1054列名对不上导致
  • 非隔离220V降5V200mA-500mA电源方案
  • vscode配置c/c++环境
  • 最新开发的预约上门保洁服务小程序源码系统 带完整的安装代码包以及搭建部署教程
  • Vue 3 中 `$emit` 的使用示例
  • 1.pytest基础知识(默认的测试用例的规则以及基础应用)
  • windows11关闭自带杀毒软件
  • MapStruct 详细使用示例,详解教程