1、String类
(1)String类的特点一(字符串一旦确立就不能更改,字符串是一个常量。)
也就是说String类对象不可变,对象的引用可以改变。
不可变的对象:
public static void main(String[] args) { String str="123"; str="234"; System.out.println(str); }
输出的结果为234。
上面在对str改变值的过程中体现的便是对象的引用的改变。
(2)String的特点二:String不属于八大基本数据类型,它属于引用数据类型。
String str="123"; String str1=new String("234");
以第二种方式跟类创建对象的方式是一样的。
(3) String类的方法:
import java.util.Scanner; public class StringDemo { public static void main(String[] args) { System.out.println("请输入第一个字符串:"); Scanner sc1 = new Scanner(System.in); String str1 = sc1.nextLine();// 在内存中只有一个对象。这个对象在字符串常量池中 System.out.println("请输入第二个字符串:"); Scanner sc2 = new Scanner(System.in); String str2 = new String(sc2.nextLine());// 在内存中有两个对象。一个new的对象在堆中,一个字符串本身对象,在字符串常量池中 System.out.println("两个字符串地址是否相等:" + (str1 == str2));// (1) System.out.println("两个字符串元素是否相等:" + str1.equals(str2));// (2) System.out.println("两个字符串元素是否相等:" + str1.equalsIgnoreCase(str2));// (2) System.out.println("字符串一的长度为:" + str1.length());// (3) System.out.println("字符串一为:" + str1.toString()); System.out.println("字符串二为:" + str2.toString()); System.out.println("字符串一从地址2开始取字符串:" + str1.substring(2));// (4) System.out.println("字符串一从地址2到5取字符串:" + str1.substring(2, 5));// (5) System.out.println("字符串一是否以指定前缀1开始:" + str1.startsWith("1"));// (6) System.out.println("字符串二是否以指定后缀9结束:" + str2.endsWith("9"));// (7) System.out.println("字符串一是否包含字符串123:" + str1.contains("123"));// (8) System.out.println("字符串123在str1中第一次出现的索引:" + str1.indexOf(str1));// (9) char[] chs = str1.toCharArray();// (10)转换为字符数组 String s0 = new String(chs); System.out.println(s0); System.out.println("字符数组的第一个字符为:" + chs[0]); byte[] bytes = str1.getBytes();// (11)转换为字节数组 String s = new String(bytes); System.out.println(s); System.out.println(bytes[0]); System.out.println("字符串二转换为大写字母为:" + str2.toUpperCase());// (12) System.out.print("charAt的运用:"); for (int i = 0; i < str1.length(); i++) { char ch = str1.charAt(i); // 获取指定位置上的字符 System.out.print(ch); } } }
(4)对象与对象的引用:
java中经常说的一句话是“万物皆对象”,那么究竟什么是对象呢?
对象是类的一个实例,比如说人类是一个类,那么具体到一个人的话这个人就是一个对象,该对象有具体的年龄、性别、姓名等属性。
什么又是对象的引用呢?
Person person; person=new Person("zhai",12); person=new Person("zhang",23);
可以看到后两行代码分别创建了两个对象,那么person就是对象的引用,对象的引用可以指向Person类型的任何一个对象。
2、StringBuffer类
StringBuffer类:与String类不同,StringBuffer类在创建对象之后可以用不同的方法对该对象进行多种方式的修改。
public class StringBufferDemo { public static void main(String[] args) { StringBuffer sb = new StringBuffer(); sb.append("1234"); //添加字符串 sb.insert(2, "dont");//在指定位置插入, sb.delete(1, 4);//删除,包含头,不包含尾 sb.replace(1, 4, "not");//替换指定范围内的内容,包含头,不包含尾 String str = sb.toString(); System.out.println(str); System.out.println(sb.reverse());//反转 System.out.println("字符串的长度为:"+sb.length()); } }
3、StringBulider类
StringBulider类创建的字符串同样可以对字符串进行修改:
public class StringBuliderDemo {
public static void main(String[] args) {
StringBuilder sb = new StringBuilder();
sb.append("1234"); //添加字符串
sb.insert(2, "dont");//在指定位置插入,
sb.delete(1, 4);//删除,包含头,不包含尾
sb.replace(1, 4, "not");//替换指定范围内的内容,包含头,不包含尾
String str = sb.toString();
System.out.println(str);
System.out.println(sb.reverse());//反转
System.out.println("字符串的长度为:"+sb.length());
}
}
4、 String类、StringBuffer类、StringBulider类的区别
(1)线程安全性:
线程安全:String、StringBuffer
线程不安全:StringBulider
(2)执行效率
StringBulider最快,Stringbuffer次之,String最差
(3)存储空间
String的对象一旦创建就不能改变,是一个常量,对String操作后会生成新的String,效率低且浪费空间。
StringBuffer和StringBulider的对象都是可以改变的,节省了空间,效率较高。不能使用String"+"来拼接,避免产生大量无用的中间对象,耗费空间且执行效率低下(新建对象、回收对象花费大量时间)。
(4)使用场景
少量数据:String
大量数据、多线程:StringBuffer
大量数据、单线程:StringBulide
总结:
String、StringBuffer、StringBulider的区别:https://www.cnblogs.com/zhai1997/p/12423092.html