概述
String类代表字符串。 Java程序中的所有字符串文字(例如"abc" )都被实现为此类的实例。
- 字符串特点
- 内容不可变
- 可以共享使用
字符串
效果上相当于char[]字符数组
,但是底层原理是byte[]字节数组
创建
public String();
创建一个空白字符串,不含任何内容
String str=new String();
public String(char[] array);
根据字符数组的内容,创建对应的字符串
char[] strArr={'c','b','d'};
String str=new String(strArr);
System.out.println(str); // cbd
public String(byte[] array);
根据字节数组的内容,创建对应的字符串
byte[] strArr ={65,66,67};
String str=new String(strArr);
System.out.println(str); // ABC
- 直接创建
String str="hello";
字符串常量池
- 对于引用类型,
==
进行的是地址的比较 双括号直接写
的是在常量池当中,new
的不在池当中
String str1="abc";
String str2="abc";
char[] charArr={'a','b','c'};
String str3=new String(charArr);
String str4=new String("abc");
byte[] byteArr={97,98,99};
String str5=new String(byteArr);
System.out.println(str1=="abc"); // true
System.out.println(str1+"--"+str2+"--"+str3+"--"+str4+"--"+str5); // abc--abc--abc--abc--abc
System.out.print((str1==str2)+"--"+(str3==str2)+"--"+(str4==str2)+"--"+(str4==str3)+"--"+(str5==str3)+"--"+(str5==str2)+"--"+(str5==str4)); // true--false--false--false--false--false--false
方法
public boolean equals(Object obj)
,参数是任何对象,只有参数是一个字符串并且内容相同时才会返回true,否则返回false。
1.1 严格区分大小写。
2.1 任何对象都能用Object进行接收
String str1="abc";
String str2="abc";
char[] charArr={'a','b','c'};
String str3=new String(charArr);
String str4=new String("abc");
byte[] byteArr={97,98,99};
String str5=new String(byteArr);
System.out.println(str1=="abc"); // true
System.out.println(str1.equals(str2)); // true
System.out.println(str2.equals(str3)); // true
System.out.println(str3.equals(str4)); // true
System.out.println(str4.equals(str5)); // true
System.out.println(str4.equals("abc")); // true,如果str4=null,则会报错
System.out.println("abc".equals(str1)); // true,推荐这种写法
public equalsIgnoreCase(Object obj)
,字符串比较,区分大小写
String str1="abc";
String str2="Abc";
System.out.println(str1.equalsIgnoreCase(str2)); // false
public int length()
,获取字符串中含有的字符个数,字符串长度
String str1="abc";
System.out.println(str1.length()); // 3
public String concat(String str)
,两个字符串拼接,返回新字符串
String str1="abc";
String str2="de";
String str3= str1.concat(str2);
System.out.println(str3); // abcde
public char charAt(int index)
,获取指定位置的单个字符,索引从0开始
String str1="abc";
System.out.println(str1.charAt(1)); // b
public int indexOf(String str)
,查找参数字符串在本字符串中首次出现的索引值,如果没有,返回-1
String str1="abc";
String str2="de";
System.out.println(str1.indexOf(str2)); // -1
String str4="c";
System.out.println(str1.indexOf(str4)); // 2
public String substring(int index)
,截取字符串,从参数位置开始,一直到字符串末尾,返回新字符串,原字符串不变
String str="de";
System.out.println(str.substring(1)); // e
System.out.println(str); // de
public String substring(int begin,int end)
,截取字符串,从begin位置开始,一直到end位置中间的字符串([begin,end)),返回新字符串,原字符串不变
String str="helloworld";
System.out.println(str.substring(2,5)); // llo
public char[] toCharArray()
,将当前字符串拆分为字符数组作为返回值
String str="hello";
char[] charArr=str.toCharArray();
System.out.println(Arrays.toString(charArr)); // [h, e, l, l, o]
public byte[] getBytes()
,获得当前字符串底层的字节数组
String str="abc";
byte[] byteArr=str.getBytes();
System.out.println(Arrays.toString(byteArr)); // [97, 98, 99]
publicString replace(charSequence oldString,charSequence newString)
,将所有出现的老字符串替换为新字符串,返回替换之后的新字符串。
11.1 charSequence意思时可以接收字符串类型
String str8="helloworld";
String str9=str8.replace("o","*");
System.out.println(str9); // hell * w * rld
public String[] split(String regex)
,按照参数(正则表达式)的规则,将字符串分隔为若干部分
String str10="aa,bb,cc";
String[] strArr= str10.split(",");
System.out.println(Arrays.toString(strArr)); // [aa, bb, cc]
String str11="aabbcc";
String[] strArr2= str11.split("");
System.out.println(Arrays.toString(strArr2)); // [a, a, b, b, c, c]