String类

String类

概述:
	String对象用于保存字符串 也就是一组字符序列
	
特点:
	1.字符串的字符使用Unicode字符编码 一个字符(不区分字母还是汉字)占两个字节
	2.String类实现了接口Serializable[String可以串行化 可以在网络传输] 实现接口Comparable[String对象可以比较大小]
    3.String是final类 不能被其他的类继承
    	String有属性private final char value[];
    	用于存放字符串内容一定要注意:value是一个final类型 
    	不可以修改 value不能指向新的地址 但是单个字符内容是可以变化的
    4.字符串是常量 一旦被创建不能改变 但可以改变引用	
    
赋值方式:
	方式一
        直接赋值 String s = "jack";
        先从常量池查看是否有"jack"数据空间 若有 直接指向
        若没有 则重新创建 然后指向
        s最终指向的是常量池的空间地址
	方式二
        调用构造器 String s2 = new String("jack");
        先在堆中创建空间 里面维护了value属性 指向常量池jack空间
        若常量池没有"jack" 重新创建
        若有 直接通过value指向 最终指向的是堆中的空间地址

练习1(intern()方法)

public class StringExercise01 {
    public static void main(String[] args) {
        String a = "java"; //a 指向常量池的"java"
        String b =new String("java");//b 指向堆中对象
        System.out.println(a.equals(b)); //T
        System.out.println(a == b); //F
        //b.intern() 方法返回常量池地址
        System.out.println(a == b.intern()); //T
        System.out.println(b == b.intern()); //F
    }
}

练习2(== equals())

public class StringExercise02 {
    public static void main(String[] args) {
        String s1 = new String("hello");//指向堆中对象
        String s2 = new String("hello");//指向堆中对象
        System.out.println(s1 == s2);//false
        System.out.println(s1.equals(s2));//true

        String s3 = new String("hello");//指向堆中对象
        String s4 = "hello";//指向常量池
        System.out.println(s3 == s4);//false
        System.out.println(s3.equals(s4));//true

        String s5 = "hello";//指向常量池
        String s6 = "hello";//指向常量池
        System.out.println(s5 == s6);//true
        System.out.println(s5.equals(s6));//true
    }
}

练习3(创建对象个数)

public class StringExercise03 {
    public static void main(String[] args) {
        String s1 = "hello";
        s1 = "haha";
        //创建了2个对象 常量池中的hello对象和haha对象

        String a = "hello" + "world";
        /*
        创建了1个对象
        String a = "hello" + "world";
        编译器优化为 String a = "helloworld";
        */

        String x = "hello";
        String y = "world";
        String z = x + y;
        //创建了3个对象 x对象 y对象 z对象
    }
}

构造方法

public String()
无参构造 初始化创建的一个String对象
public String(byte[] bytes) 
把字节数组转换成一个字符串
public String(byte[] bytes,int index,int length) 
把字节数组从index下标往后取length个元素转换成字符串
public String(char[] value) 
把字符数组转换成一个字符串
public String(char[] value,int index,int count) 
把字符数组从index下标往后取count个元素转换成字符串
public String(String original) 
新创建的的字符串是该参数字符串的副本

判断功能

public boolean equals(Object obj) 
将此字符串与指定的对象obj相比 返回一个boolean值
public boolean equalsIgnoreCase(String str) 
将此字符串与指定的字符串str相比(忽略大小写) 返回一个boolean值
public boolean contains(String str) 
判断一个字符串中是否包含字符串str 返回一个boolean值
public boolean startsWith(String str) 
判断一个字符串是否是以字符串str开始的
public boolean endsWith(String str) 
判断一个字符串是否是以字符串str结尾的
public boolean isEmpty()
当字符串的长度为0时返回一个true

获取功能

public int length()
返回一个字符串的长度 返回int类型的值
public char charAt(int index) 
返回一个字符串第index+1个的值 返回char类型的值
public int indexOf(int ch) 
返回指定字符ch在此字符串中第一次出现的索引
public int indexOf(String str) 
返回指定字符串str在此字符串中第一次出现的索引
public int indexOf(int ch,int fromIndex) 
返回从formIndex位置开始指定字符ch在此字符串中出现的索引
public int indexOf(String str,int fromIndex) 
返回从formIndex位置开始指定字符串str在此字符串中出现的索引
public String substring(int start) 
返回从start开始往后所有字符组成的字符串 
public String substring(int start,int end) 
返回从start到end的字符组成(不包含end)的字符串

转换功能

public byte[] getBytes()
将字符串转换成byte类型的数组
public char[] toCharArray()
将字符串转换成一个char类型的数组
public static String valueOf(char[] chs) 
将一个char数组转换成一个字符串
public static String valueOf(int i) 
将一个int类型数据转换成一个字符串
public String toLowerCase()
将字符串中的字符转换成小写
public String toUpperCase()
将字符串中的字符转换成大写

替换功能

public String replace(char old,char new) 
把字符串中的字符old替换成字符new
public String replace(String old,String new) 
把字符串中的字符串old替换成字符串new

比较功能

public int compareTo(String str) 
按照字典形式比较两个字符串(字符串等于字符串str返回0)
public int compareToIgnoreCase(String str) 
按照字典形式比较两个字符串(不考虑大小写)

其他功能

拼接功能
public String concat(String str) 
将字符串str拼接在原有字符串之后
去除空白功能
public String trim() 
将字符串前面和后面的空白去掉

StringBuffer类

概述
	在对字符串拼接时 每次拼接都会创建一个新的String对象(耗时 耗空间)
	StringBuffer解决了这个问题 线程安全的可变字符序列
特点
	1.StringBuffer的直接父类是AbstractStringBuilder
    2.StringBuffer实现了Serializable 即StringBuffer对象可以串行化
    3.在父类中AbstractStringBuilder有属性char[] value 不是final 该value数组存放字符串内容 引出存放在堆中
    4.StringBuffer是一个final类 不能被继承
    5.因为StringBuffer字符内容是存在char[] value 所以在变化不用每次都更换地址(即不是每次都创建新对象) 所以效率高于String
	

构造方法

public StringBuffer()		
无参构造方法 创建一个大小为16的char[]
public StringBuffer(int capacity)
通过构造器指定char[]大小
public StringBuffer(String str)	
通过给一个字符串创建StringBuffer char[]大小就是str.length()+16

public int capacity()
返回当前容量 理论值
public int length()
返回长度(字符数) 实际值

增删改查

增
	public StringBuffer append(String str)
	添加任意类型数据到字符串缓冲区 并返回字符串缓冲区本身
	public StringBuffer insert(int offset,String str)
	在offset位置插入任意类型数据到字符串缓冲区 并返回本身

删
	public StringBuffer deleteCharAt(int index)
	删除指定位置的字符 并返回本身
	public StringBuffer delete(int start,int end)
	删除从指定位置开始指定位置结束的内容 并返回本身[start,end)

改
	public StringBuffer replace(int start,int end,String str)
	用str替换从start开始到end的字符 [start,end)


查
	public int indexOf(String str)
	返回指定字符串str在此字符串中第一次出现的索引
	public synchronized int indexOf(String str, int fromIndex)
	返回从formIndex位置开始指定字符串str在此字符串中出现的索引
	
	public int lastIndexOf(String str)
	返回指定字符串str在此字符串中最后一次出现的索引
	public synchronized int lastIndexOf(String str, int fromIndex)
	返回从formIndex位置开始指定字符串str在此字符串中出现的最后一次索引

其他功能

反转功能
	public StringBuffer reverse()						
	字符串反转

截取功能
	public String substring(int start)
	截取从指定位置到末尾
	public String substring(int start,int end)
	截取从指定位置开始到结束位置[start,end)

StringBuffer和String互换

String -> StringBuffer
构造方法
	String str = "hello";
	StringBuffer stringBuffer = new StringBuffer(str);
append方法
	StringBuffer append = new StringBuffer().append(str);
insert方法
	StringBuffer insert = new StringBuffer().insert(0, str);
        
StringBuffer -> String
构造方法
	StringBuffer sb = new StringBuffer("Hello");
	String s1 = new String(sb);
substring方法
	String substring = sb.substring(0);
toString方法
	String s2 = sb.toString();

StringBuffer类

1.StringBuilder继承AbstractStringBuilder类
2.实现了Serializable,说明StringBuilder对象可以串行化
  对象可以网络传输 可以保存到文件
3.StringBuilder是final类 不能被继承
4.StringBuilder对象的字符序列仍然是存放在其父类
  AbstractStringBuilder的char[] value
  字符序列是存放在堆中
  
方法与StringBuffer相似  

String StringBuffer StringBuilder区别

参数传递
1.基本数据类型 值传递 传递的是实参的值 形参的改变 不影响实参
2.引用数据类型 引用传递 传递的是地址值 形参的改变 会影响实参
3.String类型 传递的是字符的值

String
少量的字符串操作
StringBuffer
线程安全
多线程在字符串缓冲区进行大量操作
StringBuilder
非线程安全
单线程在字符串缓冲区进行大量操作

StringJoiner类

StringJoiner(CharSequence delimiter) 
构建了一个字符容器,指定分隔符 
StringJoiner(CharSequence delimiter, CharSequence prefix, CharSequence suffix) 
构建了一个字符容器,指定分隔符,前缀,后缀
StringJoiner add(CharSequence newElement) 
增加了一份给CharSequence值的StringJoiner价值的下一个元素。  
int length() 
返回该 StringJoiner的 String表示长度。 
String toString()  
把容器中的数据以字符串返回
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值