0126 String类
在API中的String类代表字符串例如Sring s=“abc”中的“abc”就是此类的实例化展示,也就是一个String类的对象
字符串的本质就是一个数组Sring s=“abc”中相当于是一个char[] arr={'a','b','c'};
在String类中也可以通过构造方法去实现创建对象
测试一下
public static void main(String[] args) { String s="abc"; String s2="abc"; String s3=new String("abc"); System.out.println(s==s2);//true System.out.println(s.equals(s2));//true System.out.println(s==s3);//false System.out.println(s.equals(s3));//true }
上述代码中当s和s2进行比较的时候,结果是true,因为“a,b,c”作为string对象是一个用private final修饰的常量char数组,一次赋值终身不变。此时这个常量是进入的堆中的常量池,常量池中不允许有重复的常量存在,所以当我再创建s2=“a,b,c”时,他会将已经创建好的“a,b,c”的地址值赋值给s2,所以s和s2的地址值是一样的所以为true。那么当s与s3比较时结果为false,因为当new String("abc");的时候此时是两个对象其中“a,b,c”是一个对象,new string又是一个对象,此时new string的对象是在堆中附新的地址值,将新的地址值赋值给了s3,所以在比较时为false。那么看当调用equals方法的时候都为true,此时调用的是string类中的equals方法,重写了object类中的equals,所以比较的是内容。
图解
String类的构造方法
(1)String()初始化一个新创建的 String
对象,使其表示一个空字符序列。
例:String s=new String();
(2)String(byte[] bytes)将一个byte字节数组转成字符串
例:
byte[] bytes={65,66,67,68};
String s=new String(bytes);
System.out.println(s);//ASCII表
运行结果:ABCD
注:将一个字节转为字符串的时候,当字节为整数的时候它对应的是ASCII码表,码表中66对应的是A,67对应的B,67对应的C,68,对应的是D。48对应的是0,97对应的是a
那当字节中的数为负数的时候对应的是中文码表,一个中文代表两个字节
(3)String(byte[] bytes, int offset, int length)
将一个byte数组从offiset开始,传入多长length 返回一个新的字符串
例:String s2=new String(bytes,1,2);从下标1开始,传入两个
(4)String(char[] value)将一个字符数组转为字符串数组
例:
char[] ch={'a','b','0','1'};
String s3=new String(ch);
System.out.println(s3);
运行结果为:
ab01
(5)String(char[] value, int offset, int count)将一个char数组从offiset开始,传入多多少个count返回一个新的字符串
例:
String s4=new String(ch,2,2);
System.out.println(s4);//01
String类的方法(常见)
(1)length()返回字符串的长度
(2)substring(int index)返回从index开始截取到字符串末尾的字符串
(3)subsring(int index,int end)返回从index开始截取,截取end个的字符串
(4)startsWhith(string index)判断该字符串是否以index开头
(5)endsWith(string index)判断是否以index结尾
(6)contains(string s)判断该字符串是否存在s字符
(7)indexOf(string str)str字符串在该字符串中第一次出现的位置
(8)getBytes()将该字符串转为字节数组
(9)toCharArray() 将该数组转为字符数组
(10)equals(string anotherString)判断该字符串是否与anotherString字符串相同
(11)equalsIgnoreCase(String anotherString)判断该字符串是否与anotherString形同,不区分大小写
(12)toString()返回该字符串本身
例:
public static void main(String[] args) { // TODO Auto-generated method stub String s="hello java,java is good"; //字符串长度 int len=s.length(); System.out.println(len); //截取字符串 String s1=s.substring(6); //包头不包尾 String s2=s.substring(2,6); System.out.println(s1); System.out.println(s2); //判定以小字符串开头 boolean f1=s.startsWith("hello"); //判定以小字符串结尾 boolean f2=s.endsWith(".java"); System.out.println(f1); System.out.println(f2); //判断大字符串中是否包含小字符串 boolean f3=s.contains("java"); System.out.println(f3); //获取小字符串在大字符串中第一次出现的索引值//若不存在就会返回-1 int a=s.indexOf("java"); System.out.println(a); //将字符串转为字节数组 byte[] arr=s.getBytes(); for(int i=0;i<arr.length;i++){ System.out.print(arr[i]+"\t"); } System.out.println(); //字符串转字符出租 char[] arr1=s.toCharArray(); for(int i=0;i<arr1.length;i++){ System.out.print(arr1[i]+"\t"); } System.out.println(); //判断两个字符串是否相同 System.out.println("abc".equals("ABC")); //忽略大小写比较 System.out.println("abc".equalsIgnoreCase("ABC")); System.out.println(s); }