String类是由多个字符组成的一串数据. 值一旦创建不可改变. 一旦值改变就会创建一个新对象。 为什么不可改变?通过查看String内部代码发现
存放数据的是一个被final修饰的char字符数组,被final修饰的数据类型,只能在创建时赋值,或者通过外部赋值构造方法赋值,且赋值后不可以在进行改变。所以当对当前字符串进行处理后,往往需要创建一个新的String对象类接收改变值。
1.简化的字面量创建方式:
String s = "abc";
String s1 = "abc";
System.out.println(s==s1);//true
System.out.println(s.equals(s1));//true
先去字符串常量池中查找,有没有abc,如果没有就在字符串常量中创建一个对象(abc),如果字符串常量中已经存在abc,那么直接指向已有的对象即可。
2.使用new关键字去创建
/*
new +构造方法
凡是new 出来的,在内存空间中是独一无二的.
*/
String s3 = new String("abc");
若使用new进行创建则会产生一个新的字符串对象,即使内容和字符串常量池中的相同也会重新分配对象地址,若创建的对象内容在常量池中没有时,则先在常量池中创建,然后再在堆中进行创建,并返回堆中的地址。
String常用的方法
1.判断功能
String s1 = "abc";
String s2 = new String("abC");
System.out.println(s1.equals(s2));//比较字符串内容是否相等
System.out.println(s1.equalsIgnoreCase(s2));//比较字符串内容是否相等(忽略大小写)
System.out.println(s1.contains("c"));//是否包含指定的子串
System.out.println(s1.isEmpty());//判断是否为""
System.out.println(s1.startsWith("ab"));//判断以指定字符串开头
System.out.println(s1.endsWith("bc"));//判断以指定字符串结尾
String s3 = "abc";
String s4 = "efg";
System.out.println(s3.compareTo(s4));//字符串比大小
2.获取功能
String s = "abcdefgd";
// 01234567
System.out.println(s.length());
char c = s.charAt(4);//获取指定位置(索引)的字符
System.out.println(c);
int index = s.indexOf("d");//从前向后找 只找首次出现的位置
System.out.println(index);
int index1 = s.indexOf("d",index+1);//从前向后找 从指定位置开始
System.out.println(index1);
int index2 = s.lastIndexOf("d");//从后向前查找,首次出现的位置
System.out.println(index2);
String s1 = "abcdefgd";
// 01234567
String s2 = s1.substring(3);//从指定的为开始截取字符串,直接到最后一位,最终返回一个新的字符串对象
System.out.println(s1);
System.out.println(s2);
String s3 = s1.substring(2,6);//截取指定区间 包含开始位置,不包含结束位置
System.out.println(s3);
3.转换功能
String s = "abcd";
char[] chars = s.toCharArray(); //将字符串转换为一个新的char数组
System.out.println(Arrays.toString(chars));
String s1 = new String(chars); //将char数组 转为字符串
System.out.println(s1);
String s2 = String.valueOf(chars);
System.out.println(s2);
String s3 = "abcdEFG一";
System.out.println(s3.toUpperCase());//转大写
System.out.println(s3.toLowerCase());//转小写
String s4 = s3.concat("11"); // + 可以连接其他类型
System.out.println(s4);
String s5 = "ab&cde&efg";
String[] strings = s5.split("&");//按照指定的分隔符,将字符串拆分为数组
System.out.println(Arrays.toString(strings));
4.替换功能
String replace(char old,char new) 可以替换规定的字符
String replace(String old,String new) 可以替换规定的字符串
replaceAll(String regex, String replacement)
replaceFirst(String regex, String replacement)
去除字符串两空格 String trim()