1.概念
最终类
java中所有的字符串常量都是String类的对象
String类底层是根据不可改变字符数组来实现数据存储,String类对象的内容无法改变(常量)
java中所有的常量存储在方法区的运行时常量池
当常量池中已经存在引用,如果后续有同名的引用那么共享同一个引用(共享)
//创建了几个对象?5个对象
String str="a";//1
str+="b";//str=new StringBuilder("a").append("b").toString();//4
2.StringBuilder与StringBuffer
从jdk1.0开始String类做拼接使用的是StringBuffer,安全可靠但是拼接效率较低。
从jdk1.5开始String类做拼接使用的是StringBuilder,不安全可但是拼接效率较高。
3.重要方法
1.charAt();根据指定的下标值返回字符串对象对应的字符
2.length():返回字符串对象的长度值
3.toCharArray():把字符串对象的内容转成字符数组
4.new String (char[] cs,offset,int count):指定字符数组内容转成新的字符串对象
public class StringDemo2 {
public static void main(String[] args) {
//
String str="wdjbuehdv";
//指代String类对象的下标来返回对应字符
/*System.out.println(str.charAt(2));//可以获取字符串对象中任意一个字符
//遍历字符串对象的内容
//length()方法---返回字符串对象的长度值
//length属性---返回数组长度值
for(int i=0;i<str.length();i++){
System.out.println(str.charAt(i));
}*/
//把String类对象的内容转成字符数组
char[] cs=str.toCharArray();
//把字符数组内容转成新的字符串对象
//String s=new String(cs);
//把字符数组指定内容转成新的字符串对象
String s=new String(cs,1,3);
//
System.out.println(s);
}
}
5.compareTo():根据字典比较来确定两个字符串对象的大小
6.compareToIgnoreCase():忽略大小来进行字典比较
String str1="AbcsRg";
String str2="ahytrg";
//把两个字符串对象内容转到两个字符数组,根据对应位置的两个字符数组的字符求差值
//如果差值不为0就当做返回值来返回,如果差值为0挪到下一位继续求差值
//如果每个差值都为0,最后就以两个字符串对象的长度之差当做返回值来返回
//如果方法返回值为正数,说明前面对象大于后面的对象
//如果方法返回值为负数,说明前面对象小于后面的对象
//如果方法返回值为0,说明前面对象和后面的对象的内容一致
//根据字典比较来确定对象的大小关系
System.out.println(str1.compareTo(str2));
//可以忽略大小写比较
System.out.println(str1.compareToIgnoreCase(str2));
7.concat():把指定字符串拼接到原串的末尾。底层是根据数组扩容来进行拼接(+和concat拼接的区别?1.底层实现不同2.+可以拼接任意数据,但是concat只能拼接字符串)
String str="abc";
//把指定字符串内容拼接到原串的末尾
//底层是根据数组扩容来进行拼接
//+和concat拼接的区别?
//1.底层实现不同2.+可以拼接任意数据,但是concat只能拼接字符串
System.out.println(str.concat("123"));
8.contains():判断指定内容是否是原串的子串,原串中连续的区域---子串
//String str="sdgvcd";
//原串中连续区域---子串
//判断指定内容是否是原串的子串
//System.out.println(str.contains("dgvd"));
9.startsWith()/endsWith():判断是否以子串来开头/结尾
String str="abcxxxxx.zip";
//判断是否以子串来结尾
//文件后缀.doc.txt.zip
System.out.println(str.endsWith(".zip"));
//判断是否以子串来开头
System.out.println(str.startsWith("abc"));
10.equals():对Object类里equals方法进行重写,重写之后根据对象的地址值以及对象的内容来综合判断对象是否相等(instanceof判断对象和类之间的关系,左边是对象,右边是子类、本类、父类)
11.equalsIgnoreCase():忽略大小写来比较--验证码
public class StringDemo {
public static void main(String[] args) {
//
String str1="abc";
String str2=new String("Abc");
//instanceof---判断对象和类之间的关系
//instanceof,左边是对象,右边是子类、本类、父类
//对Object类里equals方法进行重写
//重写之后根据对象的地址值以及对象的内容来综合判断
System.out.println(str1.equals(str2));
//忽略大小写进行比较---验证码
System.out.println(str1.equalsIgnoreCase(str2));
}
}
12.getBytes():把字符串对象内容转成字节数组
13.new String(byte[] bs,int offset,int length,CharSet charset):可以把字节数组部分内容按照指定码表转成新的字符串对象
import java.io.UnsupportedEncodingException;
public class StringDemo6 {
public static void main(String[] args) throws UnsupportedEncodingException {
//
String str="买东西";
//把字符串对象内容转成字节数组
//把字符串对象(字符形式)按照码表转成字节---编码
byte[] bs=str.getBytes("gbk");
//把字节数组转成新的字符串对象
//根据指定码表把字节形式数据转成字符形式数据---解码
//由于编码和解码使用的码表不一致产生乱码
// String s=new String(bs,"gbk");
//把字节数组的部分内容转成新的字符串对象
String s=new String(bs,0,4,"gbk");
//
System.out.println(s);
}
}
14.hashcode():重写Object类里hashcode方法,哈希码值的计算过程只和对象的内容有关系
String str1="abc";
String str2=new String("abc");
//重写Object类里hashcode方法
//哈希码值的计算过程只和对象的内容有关系
System.out.println(str1.hashCode());
System.out.println(str2.hashCode());
15.indexOf():根据指定内容返回第一次出现的下标值,根据指定的起始(包含)来进行查询进行返回第一次出现的下标值
String str="jdsfsdsf";
//返回指定内容第一次出现下标值
//如果没有查找到返回-1
System.out.println(str.indexOf("df"));
//根据指定的起始下标(包含)来进行查找返回第一次出现的下标值
System.out.println(str.indexOf("dsf",5));
编码--把文字转成底层数字的过程 转换规则--码表
ASCii(阿斯克码表 0~127 占一共1字节)--ISO8859-1(西欧码表 0~255 占1个字节)--BIG5(繁体中文 占2字符)--GB2312(简体中文 占2个字节)--GBK(国标码 占2个字节)--Unicode编码体系(UTF-8(占3个字节),UTF-16(占2个字节)等等)
所有的完整码表默认兼容西欧码表