Java String类

1.String类:一旦声明不可改变,如果改变对象内容,改变的只是其引用的指向而已
1.1比较:“==”:基本数据类型:值的大小;引用数据类型:地址的值
.equals():字符串内容。
1.2直接赋值:

        String str1="Hello";
        String str2="Hello";
        System.out.println(str1==str2);

结果:true
原因:在JVM底层会自动维护一个对象池,若采用直接赋值的方法,那么该实例对象(字符串内容)会自动保存到这个对象池中。若下次继续采用直接赋值的方法若是对象池中有这个内容,将直接进行引用;若是没有,则开辟新的字符串对象后将其保存在对象池中供下次使用。
分析:
Java String类_第1张图片
可以采用.intern()方法使之入池。
请解释String类中两种对象实例化的区别
1.直接赋值:只会开辟一块堆内存空间,并且该字符串对象可以自动保存在对象池中以供下次使用。
2.构造方法:会开辟两块堆内存,1.字符串匿名对象空间2.new出来的,其中一块会变成垃圾空间(匿名对象)。
常用方法
public char chatAt(int index):取得指定索引位置的字符,索引从0开始。如果超过了字符串长度,会报StringIndexOutOfBoundsException异常
public char[] toCharArray():将字符串变为字符数组
String str1 = String.copyValueOf(arr1);//字符串转数组的方法
public String(char value[]):将字符数组的内容变为字符串
substring():截取字符串 左闭右开
如:“hamburger”.substring(4, 8) returns “urge”
“smiles”.substring(1, 5) returns “mile”
public boolean equalsIgoneCase(String anotherString):不区分大小写的比较
public int compareTo(String anotherStr):比较两个字符串大小关系,可以比较中文,当碰到第一个不相等的字符停止比较,返回两个字符的asc差值(前减后)
字符串查找:
Java String类_第2张图片
Java String类_第3张图片
*使用indexOf()时若内容重复,他只能返回第一个的位置,索引从0开始
*现在一般使用contains()
字符串替换Java String类_第4张图片regex:所要替换的元素
其他常用方法:
split(String regex):按照括号内的规定字符进行拆分
split(String regex,int limit):按照括号内的规定字符进行拆分,拆分几部分就是limit值
Java String类_第5张图片
左闭右开的截取方法
Java String类_第6张图片
方法6:空格也算长度
注意:String str1=“”;为空字符串
String str2=“ ”;不是空字符串,长度为1
string str3=null;会报NullPointerException错误
System.out.println(new String().isEmpty());//true
StringBuffer
可通过append()在堆上进行修改,但是只能用(StringBuffer sb=new StringBuffer(“hello”))进行初始化。String和StringBuffer类不能直接转换。如果要想互相转换,可以采用如下原则:
String变为StringBuffer:利用StringBuffer的构造方法或append()方法
StringBuffer变为String:调用toString()方法。
String修改一个实现原理:先创建一个StringBuilder,其次调用append()方法,然后调用toString()把结果返回
有一些特有方法:public synchronized StringBuffer reverse()//反转
public synchronized StringBuffer delete(int start, int end)//删除指定内容
public synchronized StringBuffer insert(int offset, 各种数据类型 b)//插入各种类型数据
面试题:请解释String、StringBuffer、StringBuilder的区别:
String的内容不可修改,StringBuffer与StringBuilder的内容可以修改.
StringBuffer采用同步处理,属于线程安全操作;而StringBuilder采用异步处理,属于线程不安全操作。

你可能感兴趣的:(Java String类)