String类的使用

String类

1.String类的不可变性:

                    1)String是一个final修饰的类,是不可以变的字符序列,不可被继承的

                    2)String对象是存储在一个char类型的数组里的

                    3)String实现了Serializable接口:表示字符串支持序列化。

                                       实现了comparable接口:表示可以比较大小。

                    4)代表不可变的字符序列。体现:

                                       1.当对字符串重新赋值时,需要重写指定区域赋值,不能使用原有value进行赋值。

                                       2.当对原有的字符串进行拼接时,也需要在指定区域重新赋值,不能使用原有value进行赋值。

                                       3.当调用String.replace();方法时,也需要在指定区域重新赋值,不能使用原有value进行赋值。

                    5)通过字面量的方式给一个字符串赋值,此时的字符串值声明在字符串常量池中。

                    6)字符产常量池是不会存储内容相同的字符串的

2.String类对象的创建:

                     1)通过字面量定义:String str=" ";在常量池中创建;

                     2) 通过构造器定义:String str =new String(); 在堆上创建对象,相当于创建了两个对象;

 //字面量方式定义
        String s1="holle";
        String s2="holle";
        //构造器定义
        String s3=new String("holle");
        String s4=new String("holle");
        System.out.println(s1==s2);//ture
        System.out.println(s3==s4);//false
        System.out.println(s1==s3);//false
        //对象中String类型属性赋值,属于字面量方式定义的
        Cat cat1=new Cat("果然翁");
        Cat cat2=new Cat("果然翁");
        System.out.println(cat1.getName()==cat2.getName());//ture

面试题1:String str=new String("abc");在内存中创建了几个对象?

两个,一个是在队中创建了一个对象,另一个是在常量池中创建的对象;

面试题2:写出下面代码运行结果

       String p1="a";
        String p2="b";
        String p3="ab";
        String p4="a"+"b";
        String p5="a"+s2;
        String p6=s1+s2;
        final String p7="a";
        String p9=p7+"b";
        String p8=p5.intern;//返回值得到常量值中已经存在的"ab"
        System.out.println(p3 == p4);//ture
        System.out.println(p3 == p5);//false
        System.out.println(p3 == p6);//false
        System.out.println(p4 == p5);//false
        System.out.println(p5 == p6);//false
        System.out.println(p3 == p4);//ture
        System.out.println(p3 == p8);//ture

 p3,p4为两个常量字符串拼接可以在常量池中创建对象,p5,p6中包含变量拼接,若其中s1,s2改变则p5,p6都会改变,所以不会在常量池里,而是在堆上创建的对象。

3.String类的常用方法

int length() 返回字符串的长度: return value.length
char charAt(int index) 返回某索引处的字符 return value[index]
boolean isEmpty() 判断是否是空字符串: return value.length == 0
String toLowerCase() 使用默认语言环境,将 String 中的所有字符转换为小写
String toUpperCase() 使用默认语言环境,将 String 中的所有字符转换为大写
String trim() 返回字符串的副本,忽略前导空白和尾部空白
boolean equals(Object obj) 比较字符串的内容是否相同
boolean equalsIgnoreCase(String anotherString) equals 方法类似,忽略大 小写
String concat(String str) 将指定字符串连接到此字符串的结尾。 等价于用“ +
int compareTo(String anotherString) 比较两个字符串的大小
String substring(int beginIndex) 返回一个新的字符串,它是此字符串的从 beginIndex 开始截取到最后的一个子字符串。
String substring(int beginIndex, int endIndex) 返回一个新字符串,它是此字 符串从 beginIndex 开始截取到 endIndex( 不包含 ) 的一个子字符串。
boolean endsWith(String suffix) 测试此字符串是否以指定的后缀结束
boolean startsWith(String prefix) 测试此字符串是否以指定的前缀开始
boolean startsWith(String prefix, int toffset) 测试此字符串从指定索引开始的 子字符串是否以指定前缀开始
boolean contains(CharSequence s) 当且仅当此字符串包含指定的 char 值序列 时,返回 true
int indexOf(String str) 返回指定子字符串在此字符串中第一次出现处的索引
int indexOf(String str, int fromIndex) 返回指定子字符串在此字符串中第一次出 现处的索引,从指定的索引开始
int lastIndexOf(String str) 返回指定子字符串在此字符串中最右边出现处的索引
int lastIndexOf(String str, int fromIndex) 返回指定子字符串在此字符串中最后 一次出现处的索引,从指定的索引开始反向搜索
注: indexOf lastIndexOf 方法如果未找到都是返回 -1
String replace(char oldChar, char newChar) 返回一个新的字符串,它是 通过用 newChar 替换此字符串中出现的所有 oldChar 得到的。
String replace(CharSequence target, CharSequence replacement) 使 用指定的字面值替换序列替换此字符串所有匹配字面值目标序列的子字符串。
String replaceAll(String regex, String replacement) 使 用 给 定 的r eplacement 替换此字符串所有匹配给定的正则表达式的子字符串。
String replaceFirst(String regex, String replacement) 使 用 给 定 的 replacement 替换此字符串匹配给定的正则表达式的第一个子字符串。
boolean matches(String regex) 告知此字符串是否匹配给定的正则表达式。
String[] split(String regex) 根据给定正则表达式的匹配拆分此字符串。
String[] split(String regex, int limit) 根据匹配给定的正则表达式来拆分此 字符串,最多不超过 limit 个,如果超过了,剩下的全部都放到最后一个元素中

4.String类和其他结构之间的转换

1.String与基本数据类型,包装类之间的转换。

String-->基本数据类型,包装类:调用包装类静态方法:parseXxx(str)

基本数据类型,包装类-->Sring:valueof(xxx)

2.String与char[]之间转换

String-->char[]:toCharArrays();

char[]-->String:调用构造器:String str=new String(char[]);

3.String与byte[]之间的转换

String-->byte[]:getBytes();

byte[]-->String:调用构造器:String str=new String(Bytes);



 

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 深蓝海洋 设计师:CSDN官方博客 返回首页