public final class String
implements java.io.Serializable, Comparable<String>, CharSequence {
final:不可被继承、
Serializable:可序列化的接口。---凡是实现序列化接口的类就可以通过网络、IO流进行传输。
Comparable:凡是实现此接口的类都可以比较大小。
private final char value[];
实际上就是,不可更改的字符数组。
private final byte[] value;
换成byte的好处就是,绝大多数情况都是在使用字母,这样就只需要1个byte空间而不是char需要2个byte空间。
String s1="hello";
字符串常量池,但是字符串常量池中不允许存放两个相同的字符串。
不同版本的jdk常量池存放位置也不同。
第一种直接赋值
String s1="hello";
第二种使用构造器创建对象形式
String s2=new String("goodbye");
对比地址是否一致
public class StringDemo {
public static void main(String[] args) {
String s1="hello";
String s2="hello";
String s3=new String("hello");
String s4=new String("hello");
System.out.println(s1==s2);//true
System.out.println(s1==s3);//false
System.out.println(s3==s4);//false
}
}
只要引入了变量它就会生成新的字符串,所以地址会不同。
构造器创建对象形式实际上是创建了两个对象,第一次指向String类的value,再由value指向真正的字符串内容。
常量拼接和直接写没有区别,有变量参与就会重新创建新的对象。
public String()//表示空字符序列创建String对象
public String(String original)//
public String(char value[])
public String(char value[], int offset, int count)
public String(int[] codePoints, int offset, int count)
public String(byte ascii[], int hibyte, int offset, int count)
public String(byte ascii[], int hibyte)
public String(byte bytes[], int offset, int length, String charsetName)
public String(byte bytes[], int offset, int length, Charset charset)
public String(byte bytes[], String charsetName)
public String(byte bytes[], Charset charset)
public String(byte bytes[], int offset, int length)
public String(byte bytes[])
public String(StringBuffer buffer)
public String(StringBuilder builder)
public String(char[] value, boolean share)
在UTF-8中汉字占用3个字符,英文占用一个
在GBK(ANSI)中汉字占用2个字符,英文占用一个
UTF-8,GBK都向下兼容ascII码
编码与解码
编码:String---》字节、字节数组
解码:字节、字节数组----》String
方法名 | 作用 |
---|---|
isEmpty | 判断字符串是否为空 |
length | 返回字符串长度 |
concat | 拼接 |
equals | 判断是否相同内容 |
equalsIgnoreCase | 判断内容是否相同不区分大小写 |
方法名 | 作用 |
---|---|
toLowerCase | 转换成小写 |
toUpperCase | 转换成大写 |
trim | 去掉字符串前后空白 |
intern | 结果在常量池中共享 |
compareTo | 比较字符串大小,按照Unicode大小比较 |
compareToIgnore | 忽略大小写,比较Unicode大小 |
contains | 是否包含 |
indexOf | 第一次出现位置的下标,没有就返回-1 |
indexOf(String str,int fromIndex) | 从指定索引向后找 |
lastIndexOf | 最后一次出现的位置 |
lastIndexOf(String str,int fromIndex) | 从后往前找最后一次出现的位置 |
subString(int index) | 从指定索引取字符串到最后 |
subString(int index,int lastIndex) | 从指定索引取字符串到指定第二个索引(不包括最后索引上的字符)(左闭右开原则) |
方法名 | 作用 |
---|---|
charAt | 返回指定索引的字符 |
toCharArry | 将字符串转换为一个字符数组返回 |
valueOf | 将基本类型转换为字符串 |
方法名 | 作用 |
---|---|
startWith | 判断字符串是否以指定前缀开始 |
startWith(char c,int index) | 判断字符串是否从指定索引以指定前缀开始 |
endWith | 判断字符串是否以指定后缀为结尾 |
方法名 | 作用 |
方法名 | 作用 |
---|---|
replace(char oldChar, char newChar) | 用新字符代替旧字符 |
replace(CharSequence target, CharSequence replacement) | 用新字符串代替旧字符串 |
replaceFirst(String regex, String replacement) | 代替第一个符合正则表达式的字符串 |
replaceAll(String regex, String replacement) | 用正则表达式来代替 |
推荐阅读: