学习JAVA常用类之String类

1.String:字符串,使用一堆""引起来表示
2.String实现了Serializable接口:表示字符串是支持序列化的。
实现了Comparable接口:表示String可以比较大小
3.String内部定义了final charp[] value 用于储存字符串数据
4.String:代表不可变的字符序列。简称:不可变性。
体现:1.当对字符串重新赋值时候 需要重新指定区域,不能使用原来的value
2.当对现有的字符串进行连接操作时候,也需要重新指定内存区域赋值,不能再原有的value进行赋值
3.当调用String的replace()方法修改指定的字符或字符串时,也需要重新指定内存区域赋值
5通过字面量的方式(区别于new)给一个字符串赋值,词汇的字符串值声明在字符串常量池中
6.字符串常量池中是不会储存相同内容的字符串的

面试题:
String s= new String() 这种方式创建对象 在内存中创建了几个对象?
答:两个:一个在堆空间中new 一个在char[]对应的常量池中的数据“abc”

public class StringTest {
 
 @Test
 public void Test1(){
  String s1 ="abc";
  String s2 ="abc";
  System.out.println(s1==s2);//==用于判断你两个对象的地址值
  //此时因为在方法区(常量池)中,不能有相同的两个对象,所以指向的是一个对象
  s1="LiuRQ";//此时在方法区重新创造一个对象,指向S1
  
  String s3="abc";
  s3+="def";
  System.out.println(s3);
  System.out.println(s2);
 }
/*
 * String的实例化方式:
 * 方式一:通过字面量定义的方式
 * 方拾二:通过new+构造器的方式
 */
 @Test
 public void Test2() {
  //通过字面量定义的方式 :此时A1 A2的数据JAVAEE声明在方法区的字符串常量中
  String A1="JAVAEE";
  String A2="JAVAEE";
  //通过new+构造器的方式:此时的A3 A4保存的地址值,是数据在堆空间中开辟的地址值
  String A3=new String("JAVAEE");
  String A4=new String("JAVAEE");
 }
/*
* 结论:1常量与常量的拼接结果在常量池。且常量池中不会存在相同内容的常量。
    	2只要其中有一个是变量,结果就在堆中
*/
 @Test
 public void Test3() {
  String C1="CCC";
  String C2="DDD";
  String C6="CCCDDD";
  String C3="CCC"+"DDD";
  String C4=C1+"DDD";
  String C5=C1+C2;
 
  System.out.println(C3==C6);//ture
  System.out.println(C3==C4);//false
  System.out.println(C3==C5);//false
 }
}

String的常用类

public class TestString {
 public static void main (String[]arg) {
  //浪费空间!!!!!! 
   String gh="a";//这里有两个对象
   for(int i=0;i<10;i++) {
    gh +=i;
   }
   System.out.println(gh);//总共有12个对象

 //计算String类中字符串的个数
   String a="abc";
   int A=a.length();
   System.out.println(A);
   
   //找到字符串中的索引
   String b="abcd";
   char Aa=b.charAt(3);
   System.out.println(Aa);

   //找到输出之后的位置
   String c="LRQASYT";
   int B=c.indexOf("L");
   int Bb=c.indexOf("Y",3);
   int Bbb=c.lastIndexOf("T");
   System.out.println("输出位置1:"+B);
   System.out.println("输出位置2:"+Bb);
   System.out.println("最后输出总位置:"+Bbb);

   //大小写转化
   String d="LRQZUINIU";
   System.out.println("将字符串变成小写"+d.toLowerCase());
   System.out.println("将字符串变成大写"+d.toUpperCase());
   
   //拆分
   String e="LRQ:SYT:AAA";
   String[] E=e.split(":");
   String[] Ee=e.split("AAA");
   System.out.println();

   //想比较 不同于==
   String f=new String("LRQSYT");
   String F=new String("SYTLRQ");
   System.out.println("两个字符串是否相等"+F.equals(f));
 
}
}

StringBuffer和StringBuilder

可变字符序列 StringBuilder(线程不安全 效率高)StringBuffer(线程安全 效率不高)

public class TestStringBuilder {
   public static void main (String[]arg) {
    StringBuilder SB=new StringBuilder();//字符数组长度16
    StringBuilder SB1=new StringBuilder(2);//字符数组长度32
    StringBuilder SB2=new StringBuilder("abcd");//字符数组长度32,value[]={''}
    
    SB2.append("LRQ");
    SB2.append(true).append("123").append("SYT");
    System.out.println(SB2);
    SB2.delete(2, 2);
    SB2.reverse();
    System.out.println(SB2);
    
   }
}
发布了29 篇原创文章 · 获赞 3 · 访问量 862

猜你喜欢

转载自blog.csdn.net/My_name_PeterLiu/article/details/103452173