本模块适合 Java后端研发(业务岗、架构岗)、Java安卓原生研发等 Java 相关岗位的同学。
String a = "abc"; String b = "abc"; 会创建几个对象?
String a = "abc"; String b = "abc"; 会创建一个对象,因为 Java 中的字符串常量是存储在常量池中的,当创建一个字符串常量时,会先在常量池中查找是否存在相同的字符串常量,如果存在,则直接返回引用,如果不存在,则创建一个新的字符串常量。
在这个例子中,"abc" 是一个字符串常量。第一次执行 String a = "abc"; 时,常量池中没有 "abc",所以会创建一个新的字符串对象并将其放入常量池中。第二次执行 String b = "abc"; 时,常量池中已经有了 "abc",所以 b 会直接引用常量池中的这个对象,而不会创建新的对象。因此,a 和 b 都引用同一个字符串对象。
讲讲String和StringBuffer、StringBuilder的区别
String、StringBuffer和StringBuilder都是 Java 中的字符串类,它们之间的区别如下:
String:String是不可变的字符串类,一旦创建就不能被修改,每次修改都会创建一个新的字符串对象,效率较低。StringBuffer:StringBuffer是可变的字符串类,可以修改字符串的内容,是线程安全的,效率较低。StringBuilder:StringBuilder是可变的字符串类,可以修改字符串的内容,是非线程安全的,效率较高。
StringBuffer和StringBuilder的区别是StringBuffer是线程安全的,StringBuilder是非线程安全的,所以在单线程环境下,推荐使用StringBuilder,在多线程环境下,推荐使用StringBuffer。
讲讲String的常用方法 API
String类是 Java 中的字符串类,提供了一些常用的方法 API,如下:
public int length():返回字符串的长度。public char charAt(int index):返回字符串中指定位置的字符。public int indexOf(String str):返回字符串中指定子串的位置。public String substring(int beginIndex):返回字符串中从指定位置开始到末尾的子串。public String substring(int beginIndex, int endIndex):返回字符串中从指定位置开始到指定位置结束的子串。public String replace(char oldChar, char newChar):返回字符串中指定字符替换后的字符串。public String replace(CharSequence target, CharSequence replacement):返回字符串中指定子串替换后的字符串。public String toUpperCase():返回字符串中所有字符转换为大写的字符串。public String toLowerCase():返回字符串中所有字符转换为小写的字符串。public String trim():返回字符串中去除前后空格的字符串。public boolean equals(Object obj):判断两个字符串是否相等。public boolean equalsIgnoreCase(String anotherString):忽略大小写判断两个字符串是否相等。public boolean startsWith(String prefix):判断字符串是否以指定前缀开头。public boolean endsWith(String suffix):判断字符串是否以指定后缀结尾。public boolean contains(CharSequence s):判断字符串是否包含指定子串。public String[] split(String regex):返回字符串根据指定分隔符分割后的字符串数组。public byte[] getBytes():返回字符串的字节数组。public char[] toCharArray():返回字符串的字符数组。public int compareTo(String anotherString):比较字符串的大小。public int compareToIgnoreCase(String str):忽略大小写比较字符串的大小。public boolean isEmpty():判断字符串是否为空。
讲讲StringBuffer的常用方法 API
StringBuffer类是 Java 中的可变字符串类,提供了一些常用的方法 API,如下:
public synchronized int length():返回字符串的长度。public synchronized int capacity():返回字符串的容量。public synchronized char charAt(int index):返回字符串中指定位置的字符。public synchronized int indexOf(String str):返回字符串中指定子串的位置。public synchronized StringBuffer append(String str):追加字符串。public synchronized StringBuffer insert(int offset, String str):插入字符串。public synchronized StringBuffer delete(int start, int end):删除字符串。public synchronized StringBuffer replace(int start, int end, String str):替换字符串。public synchronized StringBuffer reverse():反转字符串。public synchronized String substring(int start):返回字符串中从指定位置开始到末尾的子串。public synchronized String substring(int start, int end):返回字符串中从指定位置开始到指定位置结束的子串。public synchronized String toString():返回字符串的字符串表示。public synchronized void setCharAt(int index, char ch):设置字符串中指定位置的字符。public synchronized void setLength(int newLength):设置字符串的长度。public synchronized void ensureCapacity(int minimumCapacity):确保字符串的容量。public synchronized void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin):将字符串中的字符复制到目标数组中。public synchronized void trimToSize():将字符串的容量调整为字符串的长度。
讲讲StringBuilder的常用方法 API
StringBuilder类是 Java 中的可变字符串类,提供了一些常用的方法 API,如下:
public int length():返回字符串的长度。public int capacity():返回字符串的容量。public char charAt(int index):返回字符串中指定位置的字符。public int indexOf(String str):返回字符串中指定子串的位置。public StringBuilder append(String str):追加字符串。public StringBuilder insert(int offset, String str):插入字符串。public StringBuilder delete(int start, int end):删除字符串。public StringBuilder replace(int start, int end, String str):替换字符串。public StringBuilder reverse():反转字符串。public String substring(int start):返回字符串中从指定位置开始到末尾的子串。public String substring(int start, int end):返回字符串中从指定位置开始到指定位置结束的子串。public String toString():返回字符串的字符串表示。public void setCharAt(int index, char ch):设置字符串中指定位置的字符。public void setLength(int newLength):设置字符串的长度。public void ensureCapacity(int minimumCapacity):确保字符串的容量。public void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin):将字符串中的字符复制到目标数组中。public void trimToSize():将字符串的容量调整为字符串的长度。