1 Star 0 Fork 0

王浩天 / MyNote

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
String类.md 5.47 KB
一键复制 编辑 原始数据 按行查看 历史
王浩天 提交于 2021-10-09 15:53 . java学习笔记 2021-10-9

String类

​ string是不可变类,一旦String对象被创建,包含在对象中的字符序列(内容)是不可变的,知道对象被销毁。

常量池:JVM中独立的区域存放字符串常量和基本类型常量(public static final)。

​ String使用private final char value[]来实现字符串的存储,也就是说String对象创建之后。就不能再修改此对象中存储的字符串内容,就是因为如此,才说String类型是不可变的。

String对象比较:

1. 单独使用""引号创建的字符串都是常量,编译期就已经确定存储到常量池中;
2. 使用new String("")创建的对象会存储到堆内存中,是运行期新创建的;
3. 使用只包含常量的字符串连接符如"aa"+"bb"创建的也是常量,编译期间就能确定,已经确定存储到常量池中;
4. 使用包含变量的字符串连接符如"aa"+s1创建的对象是运行期才创建的,存储在堆

String方法:

方法 解释
String() 初始化一个新的String对象,使其表示一个空字符串序列,并不是返回空(不等于null)
char charAt(int index) 取字符串中指定位置的字符,index 从 0 开始计算
boolean equals(Object obj) 将该字符串与指定对象比较,若二者包含的字符序列相等返回true;
int indexOf(String str) 找出 str 字符串在该字符串中第一次出现的位置
int indexOf(String str, int fromIndex) 返回指定子字符串在此字符串中第一次出现处的索引,从指定的索引开始
int lastIndexOf(String str) 返回指定子字符串在此字符串中最后一次出现处的索引
int length() 返回当前字符串长度
String replace(char oldChar, char newChar) 返回一个新的字符串,它是通过用 newChar 替换此字符串中出现的所有 oldChar 得到的
boolean startsWith(String prefix) 测试此字符串是否以指定的前缀开始
String[] split(String regex) 把字符串按指定的字符串分隔开
String substring(int beginIndex) 返回一个新字符串,它是此字符串的一个子字符串
char[] toCharArray() 将此字符串转换为一个新的字符数组
String toLowerCase() 将此 String 中的所有字符都转换为小写
String toUpperCase() 转成大写
static String valueOf(基本类型 obj) 把基本类型值转成字符串
String trim() 忽略字符串前导空白和尾部空白

StringBuffer与StringBuilder:

String是不可变类,对象中的字符序列不可变,而StringBuffer与StringBuilder是可变类。

距离说明这两个类的好处:(不用每次新建对象,效率高)

public class Demo1{
	public static void main(String[] args){
		String s = "";
		long begintime = System.currentTimeMillis();
		for(int i = 1; i <= 100000; i++){
			s+=i;
		}
		
		long endtime = System.currentTimeMillis();
		long time = endtime - begintime;
		System.out.println("运行时间:"+time);
		
		StringBuffer s1 = new StringBuffer();
		s = "";
		bengintime = System.currentTimeMillis();
		for(int i = 1; i <= 100000; i++){
			s = "" + 1;
			s1 = new StringBuffer(s);
			endtime = System.currentTimeMillis();
			time = endtime - begintime;
			System.out.println("运行时间为:"+time);
		}
	}
}

输出:

​ 运行时间为:82922

​ 运行时间为:15

可以看出:StringBuffer效率相当高

StringBuffer:是线程安全的;

StringBuilder:是线程不安全的,性能高(比StringBuffer性能要高),当频繁对字符串进行操作时推荐使用StringBuilder(多线程编程除外)。

StringBuilder类常用方法:

方法 说明
StringBuilder append(参数) 追加内容到当前StringBuilder对象的末尾
StringBuilder insert(位置,参数) 将内容插入到StringBuilder对象的指定位置
String toString() 将StringBuilder对象转换为String对象
int length() 获取字符串的长度

**例题:**编写一个程序,这个程序把一个整数数组中的每个元素用逗号连接成一个字符串,例如,根据内容为{1,2,3}的数组形成内容为"1,2,3"的字符串。

public class Demo2 {
    public static void main (String[] args) {
        int []i = {1,2,3,4,5};
        StringBuilder sb = new StringBuilder();
        for (int j : i){
            sb.append(j).append(",");
        }
        sb.deleteCharAt(sb.length()-1);
        System.out.println(sb);
    }
}
1
https://gitee.com/wanghaotian123/my-no.git
git@gitee.com:wanghaotian123/my-no.git
wanghaotian123
my-no
MyNote
master

搜索帮助

53164aa7 5694891 3bd8fe86 5694891