在Java中什么是 Primitive 和 Reference 类型
String类
1. 首先String不属于8种基本数据类型,String是一个对象。
因为对象的默认值是null,所以String的默认值也是null;但它又是一种特殊的对象,有其它对象没有的一些特性。
2. new String()和new String(“”)都是申明一个新的空字符串,是空串不是null;
3. String str=”kvill”;
String str=new String (“kvill”);的区别:
不可变
字符串常用方法
public class Person implements java.io.Serializable {
public static void main(String[] args) {
String s = "maotai我";
//获取长度
System.out.println(s.length()); //7
//转换为字节数组
System.out.println(Arrays.toString(s.getBytes()));//[109, 97, 111, 116, 97, 105]
System.out.println(Arrays.toString(s.toCharArray()));//[m, a, o, t, a, i, 我]
//是否包含另一个字符串
System.out.println(s.contains("mao"));//true
System.out.println("maotai我" == s); //地址值比较
//字符串内容比较(重写了equals)
System.out.println("mao".equals(s));//false
//字符串内容比较忽略大小写
System.out.println("MaoTai我".equalsIgnoreCase(s));//true
System.out.println(s.startsWith("ma")); //true
System.out.println(s.endsWith("ma")); //false
System.out.println(s.indexOf("a")); //1
System.out.println(s.lastIndexOf("a")); //4
//拼接字符串
System.out.println(s.concat("maomao"));//maotai我maomao
//替换
System.out.println(s.replace("m", "t"));//taotai我
System.out.println(s.trim());
System.out.println(s.isBlank());//false
System.out.println(s.isEmpty());//false
System.out.println(s.toLowerCase());//maotai我
System.out.println(s.toUpperCase());//MAOTAI我
System.out.println(s.hashCode());//836769232
System.out.println(Arrays.toString(s.split("a")));//[m, ot, i我]
}
}
数组转字符串
如果是单字节/字符数组,利用String构造函数
此时发现jdk api手册挺好用:
byte[] arr = {'a', 'b', 'c'};
System.out.println(new String(arr)); //abc
char[] arr = {'a', 'b', '我'};
System.out.println(new String(arr)); //ab我
如果是字符串数组,使用StringBuffer类
String[] arr = {"abc", "bcd", "def"};
StringBuffer sb = new StringBuffer();
for (String s : arr) {
sb.append(s);
}
System.out.println(sb.toString());//abcbcddef
int[] arr = {11,22,33};
StringBuffer sb = new StringBuffer();
for (Integer s : arr) {
sb.append(s);
}
System.out.println(sb.toString());//112233
字符串转数组
s.getBytes和s.toCharArray
String s = "maotai我";
System.out.println(Arrays.toString(s.getBytes()));//[109, 97, 111, 116, 97, 105, -26, -120, -111]
System.out.println(Arrays.toString(s.toCharArray()));//[m, a, o, t, a, i, 我]
s.split
String s = "a毛台a爱a大毛毛";
System.out.println(Arrays.toString(s.split("a"))); //[, 毛台, 爱, 大毛毛]
利用Arrays.toString工具类查看数组内容
一般用于查看数组内容
int[] arr = {1,2,3};
System.out.println(arr); //[I@33c7353a
System.out.println(Arrays.toString(arr)); //[1, 2, 3]
StringBuffer类
Java基础——数组应用之StringBuilder类和StringBuffer类
跟String没继承关系, 所以不能互相强转.
大多数方法跟String一样.
StringBuffer类也代表字符串, 内部实现跟String不一样
StringBuffer在进行字符串处理时,不生成新的对象
所以在实际使用时,如果经常需要对一个字符串进行修改,例如插入、删除等操作,使用StringBuffer要更加适合一些。
StringBuffer对象的每次修改都会改变对象自身,这点是和String类最大的区别。
StringBuffer是线程安全的.
String s = “abc”;
StringBuffer sb1 = new StringBuffer(“123”);
StringBuffer sb2 = new StringBuffer(s); //String转换为StringBuffer
String s1 = sb1.toString(); //StringBuffer转换为String
1、它是一个容器。可以存储任意类型的元素(数据)。
2、它是多线程安全的。
3、可变长度的。
4、可以对其中存入的内容和长度进行修改。
5、容器通常都会具备一些基本的方法,添加、删除、修改、获取。curd =>create update read delete
6、字符串缓冲区最终还是要转换成字符串数据给别人使用。
增加:
StringBuffer append(value);
StringBuffer insert(index , value);
append和insert方法的区别:
|--append方法只能在尾部追加。
|--insert方法可以在任意位置添加。
sb.append(“a”)..append(9).append(‘a’) 输出结果为:a9a
删除:
StringBuffer delete(start,end);//当end的值大于字符串最大角标,则end等于最大角标
StringBuffer deleteCharAt(index);//删除指定字符
修改:
StringBuffer replace(start,end,str)//替换指定长度的字符串
void setCharAt(index,shar) //替换指定位置的字符
获取:
indexOf//获取字符所在位置
length();//获取字符串长度
charAt();//获取指定角标的字符
substring(start);//获取从指定位置到结尾的字符串
substring(start,end);//获取从start—end-1角标的字符串
StringBuffer setLength(0);清空缓冲区 setLength(index)设置缓冲区的长度。
sb.StringBuffer delete(0,sb.length()) 清空缓冲区
StringBuilder类
StringBuffer的升级版. 为类提高效率, 是不安全的.
1、提高效率
2、简化代码
3、提高安全
StringBuilder与StringBuffer都继承自AbstractStringBuilder类
是可变的
最后,如果程序不是多线程的,那么使用StringBuilder效率高于StringBuffer。