概述: String字符串是一个不可变的字符序列,常量,被final修饰,不可变
常用API:
- public String(byte[] bytes,Charset charset)
通常用于解决乱码问题:new String (str.getBytes(),”utf-8”) - 与char[],byte[] 可以相互转换
char[] toCharArray public String (char[] char)
byte[] getBytes() public String (byte[] bytes)
boolean equals(Object obj)
重写了equals方法,底层源码 将此字符串与指定的对象比较。当且仅当该参数不为 null,并且是与此对象表示相同字符序列的 String 对象时,结果才为 true2. equalsIgnorecase(String str) 比较时忽略大小写 3. startWith(String str) 是否是制定字符串开头 4. endWith(String str) 结尾 5. contains(String str) 大字符串中是否包含小字符串 6. isEmpty()
与index索引相关:
- char charAt(int index): 获取制定索引位置的 字符
1. 方法运用: 遍历字符串,循环遍历,charAt索引位置返回的字符 - int indexOf(int char/String str ..) 返回第一次出现的索引,不存在则返回-1
- char charAt(int index): 获取制定索引位置的 字符
String subString(int start): 从指定索引位置开始截取字符串,直到末尾,会生成一个新的字符串
String subString(int start,int end) 指定开始结束位置截取 ,生成新的字符串
tips: 截取规则,左闭右开 [start,end)
String valuesOf(Obj obj)
valuesOf 这个方法可以把任意类型的数据转换成字符串,大部分都是通过调用其toString方法实现,具体实现请看源码,同样的,String也能转换成其他基本数据类型(除了char),通过parse XX(String str) 方法其他功能:
1. 替换:
String replace(char old,char new)
String replace(String old,String new)
2. 去除空格:
String trim()
3. 按字典顺序比较排序(详细请看treeSet,treeMap相关知识)
int compareTo(String str)
int compareToIgnoreCase(String str)常见面试题:
1. String str = new String(“abc”);请问创建了几个对象,为什么?
答: 2个,一个字符串在常量池中创建,另一个在堆内存中,堆内存中的是该字符串的副本,详情说明参见String的构造函数 public String(String original) 方法说明
2. 判断定义为String类型的s1和s2是否相等
String s1 = “ab”;
String s2 = “abc”;
String s3 = s1 + “c”;
System.out.println(s3 == s2); false
System.out.println(s3.equals(s2)); true答:s3==s2 false ,因为在底层经过StringBuffer 拼接 然后 调用toString()方法 串联成一个新的字符串后,是在堆中的一个String对象,而s2 指向的是一个常量池的地址,所以false,具体参见下方Tips
Tips:
1. Java中 任何数据与字符串用“+” 号相连接,会形成一个新的字符串,底层实现原理是 通过 StringBuilder或StringBuffer二者(也叫字符串缓冲区)的append()方法 串联起来的,最后调用toString()方法,变成最终的 新字符串
2. null 与”” 空字符串的区别:
1.”“空字符串是字符串常量,也是一个String类的对象,能调用方法
2. null是空常量,不能调用任何方法,否则会出现空指针异常,可以给任意的引用数据类型赋值