java 中操作字符串都有哪些类?它们之间有什么区别?

操作字符串的类有:String、StringBuffer、StringBuilder都是final修饰的

 String 类是不可变的类,就是说String对象声明后不能修改,,如对字符串修改都会创建新的对象

java 中操作字符串都有哪些类?它们之间有什么区别?_第1张图片

 

String s1 = "abc";
s1 = "def";
s1 = "123";
s1 = "456";
System.out.println(s1);
//s1无论赋值多少次,就取最后的那个值为最终结果
System.out.println(s1==s1);
//无论是==还是equals都是s1本事所以都是true
//equals:比较的是里面的内容
System.out.println(s1.equals(s1));
String s2 = "hi";
String s3 = "hi";
//值是一样的,字符串是一样,
// hashcode是根据字符串的内容去计算的,字符串是一样,计算出来也是一样的,
// equals也是字符串里面的内容,也是一样
System.out.println(("s2==s3 :")+(s2==s3));// true
System.out.println(("s2= ")+(s2.hashCode()));//s2= 3329
System.out.println(("s3= ")+(s3.hashCode()));//s3= 3329
System.out.println(("s2:s3 ")+(s2.equals(s3)));// true

String 和 StringBuffer、StringBuilder 的区别在于 String 声明的是不可变的对象,每次操作都会生成新的 String 对象,然后将指针指向新的 String 对象

StringBuffer、StringBuilder 可以在原有对象的基础上进行操作

经常改变字符串内容的情况下最好不要使用 String。 

StringBuffer 和 StringBuilder 最大的区别在于,StringBuffer 是线程安全的

StringBuilder 是非线程安全的,但 StringBuilder 的性能却高于 StringBuffer

在单线程环境下推荐使用 StringBuilder,多线程环境下推荐使用 StringBuffer

---------------------------------------------------------String举例------------------------------------------------------------------------------------

String s6 = "aaa";
String s7 = "bbb";
String s8 = s6 + s7;
System.out.println(("s6+s7: ")+(s6.equals(s7)));//false
System.out.println(s6==s7);//fa;se
System.out.println(s6.hashCode());//96321
System.out.println(s7.hashCode());//97314
//以下程序在执行的时候在字符串常量池中会创建一个字符串对象
System.out.println(("s8: ")+(s8));//s8: aaabbb

String s9 = "abc";
String s10 = "a";
String s11 = "bc";
String s12 = s10 + s11;
System.out.println(s12);//abc
System.out.println(s9.equals(s12));//true
//只要采用双引号复制字符串,在编译器确定将会放在方法区,若运行时对字符串变量相加会放在堆区
System.out.println(s9 == s12);//false--->>>>若运行时对字符串变量相加会放在堆区
System.out.println(s9 == ("a" + "bc"));//true

你可能感兴趣的:(java 中操作字符串都有哪些类?它们之间有什么区别?)