常用类

一、字符串相关的类

1、String的特点

         ① String声明为final的,是不可被继承的

         ② String实现了Serializable接口,所以是支持序列化的

         ③ String实现了Comparable接口,表示是可以比较大小的

         ④ String内部定义了final char[] value用于存储字符串数据,所以String是不可变的

不可变性的理解: 用字面量的方式给String类型变量赋值, 其字面量会在方法区中的字符串常量池中开辟一个空间用于存储,并把该空间的地址值赋给String变量;但是如果我们对原有的字符串常量的值进行修改,会在字符串常量池中新开辟一个空间用于存储,并把地址值给String变量,原来的地址空间中的字符串还是存在的,这就是字符串的不可变性

字面量赋值 和 new String()  的区别: String s = new String("abc");  该方式创建对象,在内存中创建了两个对象,一个是堆空间中new结构,另一个是char[] 对象的常量池中的数据  "abc" 

String s1 = "java";
String s2 = "java";

String s3 = new String("java");
String s4 = new String("java");

System.out.println(s1 == s2);    //true
System.out.println(s1 == s3);    //false
System.out.println(s1 == s4);    //false    
System.out.println(s3 == s4);    //false

String s5 = "javeHadoop";
String s6 = "Hadoop";

String s7 = s1 + s6;

System.out.println(s5 == s7);    //false

//只要拼接的时候含有变量类型时,都是在堆空间执行的,相当于new


结论:
常量与常量的拼接结果在常量池。且常量池中不会存在相同内容的常量。
只要其中有一个是变量,结果就在堆中
如果拼接的结果调用intern()方法,返回值就在常量池

2、几种转换

         String  --- >  char []   :  调用String 的 toCharArray()

         char[]  ---- >  String : 调用String的构造器 

         String  --- >  byte[] : 调用getBytes() , 该方法有一个有一个重载的方法,可以指定编码格式 ,相当于编码

         byte[]  ---- >  String : 调用String的构造器  如果编码的时候指定了编码格式,解码时要统一编码格式

3、 StringBuffer、 StringBuilder

         String、 StringBuffer、 StringBuilder 三者之间的区别:

                  String 是不可变的字符序列,底层是用final修饰的char[]  数组存储的 ,

                  StringBuffer 可变的字符序列,线程安全的 , 效率低 , 底层是用char[] 数组存储的

                  StringBuilder 是可变的字符序列,线程不安全的, 效率高 , 底层是用char[] 数组存储的

         源码分析

String str = new String(); //  char[] value = new char[0]
String str1 = new String("abc")  //char[] value = new char[] {'a','b','c'};

StringBuffer sb1 = new StringBuffer();  //char[] value = new char[16];
sb1.length();  0
底层创建了一个长度是16的cha[] 数组
sb1.appen('a'); //value[0] = 'a';

StringBuffer sb1 = new StringBuffer("abc");  //char[] value = new char["abc".length + 16];

         扩容问题: 如果要添加的数据,底层数组盛不下,那就需要扩容, 默认情况下,扩容为原来容量的2倍 + 2, 同时将原来数组的元素复制到新的数组中, 实际使用中,如果直到需要频繁的修改添加,建议调用带参数的构造器去创建字符串

         StringBuffer append(xxx):提供了很多的append()方法,用于进行字符串拼接

         StringBuffer delete(int start,int end):删除指定位置的内容

         StringBuffer replace(int start, int end, String str):把[start,end)位置替换为str

         StringBuffer insert(int offset, xxx):在指定位置插入xxx

         StringBuffer reverse() :把当前字符序列逆转

         public void setCharAt(int n ,char ch)
         

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值