String类
1. String类的简述
String类位于java.lang包下,是Java语言的核心类,提供了字符串的比较、查找、截取、大小写转换等操作
要点1. String是final修饰的,所以是最终类,最终类是不能被继承的,既然不能被继承也就意味着里面的方法不能被重写。其成员方法也是如此
要点2. **字符串常量池:**字符串是常量,所有的字符串常量都是存储在常量池中的,每个常量在常量池中都有地址;在常量池中,如果定义的常量在常量池中已经存在,则不会再进行创建,而是直接拿来用,如果不存在就创建一个常量扔进常量池
要点3. 字符串对象的创建 1、字符串本身是引用数据类型,可以通过new关键字进行对象的创建 2、字符串又比较特殊,它也可以直接赋值的形式进行字符串对象的创建
上述的区别在哪里呢? API中说明:字符串都是常量 字符串常量都在常量池(方法区)中存储,是有自己的地址的,通过new关键字创建出来的对象在堆内存中
举例说明
注意点: ==和equals的区别 ?
==用于基本数据类型时比较的是值,用于引用数据类型比较的时地址;
equals在字符串中是先比较地址后比较内容
public static void method2() {
String str = new String("new的字符串对象");
String str2 = new String("new的字符串对象");
System.out.println(str == str2);// false 因为是两个对象,地址不同
String str3 = "直接赋值的字符串对象";
String str4 = "直接赋值的字符串对象";
System.out.println(str3 == str4);// true 因为"直接赋值的字符串对象"在常量池中被str3创建,然后直接被str4拿走了地址,在常量池中是同一个常量
String str5 = "hello";
String str6 = "world";
String str7 = "helloworld";
String str8 = str5 + str6;// 对已经创建好的对象进行了拼接
System.out.println(str7 == str8);// false str8是两个对象的拼接,str7是一个对象
System.out.println(str7.equals(str8));// true equals在字符串中是先比较地址后比较内容
String str0 = "a" + "b" + "c";// 先拼接再创建对象所以str0实际还是等于"abc"
String str01 = "abc";
System.out.println(str0 == str01);// true 值相同
System.out.println(str0.equals(str01));// true
}
2. String类的常用方法
/**
* String中由于且常用的方法
*/
public static void Method2() {
// replace() 替换
String url = "http://www.news.baidu.com";
String newUrl = url.replace("baidu", "jd");
System.out.println(newUrl);//输出http://www.news.jd.com
String mum = "一二3三3四五3六七3八";
// substring() 截取 如果只有一个参数,代表开始,直到末尾结束
System.out.println(mum.substring(5));//输出 四五3六七3八
// substring() 截取 如果有两个参数,参数一代表开始,参数二代表结束位置(不包含)
System.out.println(mum.substring(3, 7));//输出 三3四五
// 注意角标从0开始,此处的3对应的是数组的四
System.out.println(mum.substring(4, mum.length()));//输出 3四五3六七3八
// spilt() 分割 参数代表要拆分的依据
String[] urlArr = url.split("b");
System.out.println(urlArr[urlArr.length - 1]);//输出 aidu.com
// 减号后的数字代表被参数划分后的第几部分,倒着数
String[] mumArr = mum.split("3");
System.out.println(mumArr[mumArr.length - 5]);//输出 一二
}
3. String类的一般方法
/**
* String中有用且不是很常用的方法
*/
public static void Method3() {
String str = "herbert bo";
System.out.println("指定索引出的char值" + str.charAt(1));//输出 指定索引出的char值e
System.out.println("指定char值对应的索引:" + str.indexOf('b'));//输出 指定char值对应的索引:3
System.out.println("指定char值对应的索引:" + str.lastIndexOf('b'));//输出 指定char值对应的索引:8
String compare1 = "agc";
String compare2 = "abc";
// .compareTo对两个字符进行对比,计算char值的差,从第一位开始,如果第一位有差就输出差,第一位一样就计算第二位
System.out.println(compare2.compareTo(compare1));//输出 -5, 因为compare2中的b比compare1中的g小5
// .concat和拼接类似
System.out.println(compare2.concat(compare1));//输出 abcagc
// .contains
System.out.println("是否包含指定的字符串:" + str.contains("hello"));//输出 是否包含指定的字符串:false
String url = "https://www.baidu.com";
// 是否以指定的头和尾
System.out.println(url.endsWith("cn"));//输出 false
System.out.println(url.startsWith("http"));//输出 true
System.out.println("判断字符串是否为空字符:" + "".isEmpty());
}