String是Java.lang.String(字符串类,包含了字符串的值和实现字符串相关操作的一些方法),使用时不需要导包.
* String是字符串类,是引用类型,底层是char数组,所以String 的特性和数组一致
*
* 1.字符串一旦构建,该字符串不能更改
*
* 2.为了提高字符串的访问效率,java虚拟机使用了一种缓存技术,可以对字符串操作更加简单方便,更加高效(字符串常量池)
*
* 3.字符串会被保存在静态区的常量池中,可以增强复用性
* 当我们用到一个重复的字符串的时候,会去常量池中进行检索,如果有该字符串,则直接指向,如果没有就创建
*
public class String_01 {
public static void main(String[] args) {
// 创建一个字符串对象,直接指向常量池
String string = "ab";
// string 是main方法中的局部变量, = 赋值只是更改了这个变量的值,并没有更改ab这个字符串对象
string = "cd";
// 只会创建一个对象 , 就是abc 保存在常量池中
String s1 = "abc";
String s2 = "abc";
// true
System.out.println(s1 == s2);
System.out.println(s1.equals(s2));
// 创建了3个对象,堆内存两个,常量池1个
String s3 = new String("abc");
String s4 = new String("abc");
System.out.println(s3 == s4);
System.out.println(s3.equals(s4));
}
}
构造方法:创建String对象的几种方法
* 1.直接创建
* 2.普通构造
* 3.字节数组
* 4.字符数组
public class String_02 {
public static void main(String[]args){
//直接创建
String s1="xxx";
//普通构造
String s2=new String("xxx");
//字节数组
byte[]bytes={97,98,99,100};
String s3=new String(bytes);
//abcd
System.out.println(s3);
//字节数组截取一部分
//下标0开始,第二个参数 起始下标(包含),第三个参数 是个数
String s4=new String(bytes,1,3);
//bc
System.out.println(s4);
//字符数组
char[]chars={'q','w','e','r','d','f'};
String s5=new String(chars);
System.out.println(s5);
//字符数组 截取一部分
String s6=new String(chars,2,3);
System.out.println(s6);
}
}
常用方法
* 1.什么方法,是成员还是静态
* 2.方法名 参数,返回值是什么
* 3.方法功能
public class String_03 {
public static void main(String[]args){
//1.char charAt(int index):获取字符串中指定下标的字符
String s1="qwer";
char c=s1.charAt(2);
System.out.println(c);
//2.boolean startsWith(String prefix):判断该字符串是否以指定字符串开头
//endsWith:是否以指定字符串结尾
System.out.println("Hello.java".endsWith(".java"));
//false注意空格
System.out.println("Hello.java ".endsWith(".java"));
System.out.println("Hello.java".endsWith("a"));
//3.boolean equals(Object obj):判断字符串是否相等
//boolean equalsgnoreCase(String str):不区分大小写判断相等
System.out.println("aAfXCs".equals("aaFxcs"));
System.out.println("aAfXCs".equalsIgnoreCase("aaFxcs"));
//4.byte[]getBytes():把字符串转换成字节数组
byte[]bytes="abcd".getBytes();
for(byte b:bytes){
System.out.println(b);
}
//5.char[]toCharArray():把字符串转换成字符数组
char[] chars="abcd".toCharArray();
for(char d:chars){
System.out.println(d);
}
//6 int indexOf(String str):获取指定字符串在该字符串中第一次出现的索引,找不到就返回-1
//int lastIndexOf(String str):同上,最后一次出现的索引,
int index = "abfacdefabc".indexOf("fa");
System.out.println(index);
index = "abfacdefabc".lastIndexOf("fa");
System.out.println(index);
//7.int length():返回字符串长度
System.out.println("xzjhcaskd".length());
//8.String[]split(String regex):分割字符串,支持正则表达式
String[]strs="2008,08,09".split(",");
for(String string:strs){
System.out.println(string);
}
System.out.println("=============");
//9.String replaceAll(String regex,String replacement):替换字符串中的内容为指定文字,支持正则表达式
//replace:替换字符串中的指定文字,不支持正则表达式
String string="ahsdhqwajsbasda";
//替换为空字符串,就等于把a删掉
String newString=string.replace("a","");
System.out.println(newString);
//10.String substring(int beginIndex,int endIndex):截取字符串,包含开始
//substring(int beginIndex):从指定下标开始(包含),到末尾
String s2="abcde";
//cdef
System.out.println(s2.substring(2));
//cd
System.out.println(s2.substring(2,4));
//11. String toUpperCase():转换为大写
//12.String toLowerCase():转换为小写
//13.String trim():去除两边空格
System.out.println(" a b ");
System.out.println(" a b ".trim());
//多个英文名字,以逗号隔开
String name="job,rols,xiaoming,xiaohong";
//需求:获取每一个姓名,并把该姓名以首字母大写进行储存
//1.以逗号分割,得到封装每个名字的数组
String[]names=name.split(",");
//2.遍历数组,获取每个姓名,截取字符串,转换为大写,再拼接起来
for(int i=0;i
使用String不推荐进行频繁的字符串拼接操作
*
* 因为字符串一旦创建不可改变,只要拼接,就会创建新的字符串对象
*
* 浪费空间,效率还低,就等于是使用定长数组频繁做添加操作一样
public class String_04 {
public static void main(String[]args){
//字符数组
String[] strs={"a","b","c"};
String str="";
//遍历
for(int i=0;i
public class String_05 {
public static void main(String[] args) {
String s1="ab";
String a="a";
String b="b";
String s2=a+b;
//false
System.out.println(s1==s2);
String s3="a"+"b";
//true
System.out.println(s3==s1);
String s4=new String("ab");
//false
System.out.println(s1==s4);
}
}



