1. String
1、String对象是不可变的
String类的value属性是用来存放字符串里面的值的。这个属性是被final修饰的。final修饰的变量不能够被第二次赋值,所以字符串是不可变的。
2、java9 以后的String更节约空间,每个字符占用1个字节
String类型在java9之前采用的是char[]来保存对应的值,因此每个字符串占用2个字节。但是到了java9之后,采用byte[]数组加一个encode-flag字段来保存,字符串的每个字符只占用1个字节。所以java9的字符串会更加节约空间。
字符串常用方法
1、charAt() 获取某个下标的字符,从下标0开始
String string = "大哥好帅"; System.out.println(string.charAt(3)); //帅
2、concat()字符串拼接,返回新的字符串
String string1 = string.concat(", 真的好帅");
System.out.println(string1);
3、contentEquals() 盘窜一个String和StringBuffer,包含的值是否相同,返回布尔值
String string2 = "中国"; StringBuffer sb = new StringBuffer("中国"); System.out.println(string2.contentEquals(sb));
4、endsWith、 startsWith 判断以什么字符串结尾或者开头
System.out.println(string1.endsWith("好帅"));
System.out.println(string1.startsWith("大"));
5、equals 判断两个字符串对象的内容是否相等
String string = "大哥好帅"; String string3 = "大哥好帅"; System.out.println(string.equals(string3)); //true
6、equalsIgnoreCase 忽略大小写判断两个字符串是否相等
//忽略大小写判断是否相等 String string4Case = "HaHa 我想你"; String string4 = "HAHA 我想你"; System.out.println(string4Case.equalsIgnoreCase(string4)); //true
7、getBytes() 获取字符串对应的数组
//获取字符串对应的bytes 数组 byte[] bytes = string4.getBytes(); for(byte b :bytes) { System.out.println(b); }
8、indexOf 获取子串在字符串中出现的起始位置
//获取子串出现的位置 String subStringTest = "大哥说大哥好帅"; System.out.println(subStringTest.indexOf("大哥"));//子串第一次出现的位置 System.out.println(subStringTest.indexOf("大哥",1));//从指定起始位置后第一次出现的位置
9、startsWith('substr', indexNum)从某个位置开始判断是否以指定字符串开始
//判断子串出现位置是否为指定位置,返回true/false String subStringTest = "大哥说大哥好帅"; System.out.println(subStringTest.startsWith("帅",6));
10、.substring获取子字符串
String subStringTest = "大哥说大哥好帅"; System.out.println(subStringTest.substring(3)); //大哥好帅
11、toCharArray()将String类型的字符串转化成为char数组
//toCharArray()将String类型的字符串转化成为char数组 char[] chars = subStringTest.toCharArray(); for(char c : chars){ System.out.println(c); }
12、toUpperCase、toLowerCase把字符串所有字母都转化为大写:
String love = "I Want Make Love"; System.out.println(love.toUpperCase()); System.out.println(love.toLowerCase()); //I WANT MAKE LOVE //i want make love
13、.length获取字符串长度
System.out.println(love.length());
2. StringBuilder和StringBuffer类
String对象是不可变的,我们在操作String的时候也会产生大量的垃圾临时变量。
如果是大量的字符串拼接操作是非常耗内存。StringBuilder和StringBuffer可以解决这个问题。
StringBuilder是线程不安全的,而StringBuffer是线程安全的,尽量使用StringBuffer。
//测试StringBuffer 适用大量的字符串拼接,节省内存 StringBuffer stringBuffer = new StringBuffer("LANGUAGES:"); stringBuffer.append("JAVA"); stringBuffer.append(",PHP"); stringBuffer.append(",PYTHON"); stringBuffer.append(",GOLANG"); stringBuffer.append(",RUBY"); stringBuffer.append(",javascript"); System.out.println(stringBuffer); System.out.println(stringBuffer.length());