String字符串

本文详细介绍了Java中的String类,强调其不可变性,指出频繁修改字符串时的效率问题,并推荐使用StringBuilder或StringBuffer。同时,列举了String类的常用方法,如length()、indexOf()、substring()等,并提醒在比较字符串时避免直接使用==。
摘要由CSDN通过智能技术生成

String是一个类,属于数据类型中的引用类型

Java中一切使用""引起来的内容,都是这个类的实例,称为字符串对象.

字符串在定义以后,不可改变,是一个常量,实际是一个字符数组.

         //这句话执行时,创建一个"Tom"字符串对象,将其地址保存在变量name中
        String name = "Tom";
        //这句话执行时看似在改变字符串的值,实际是创建了一个新的"Jerry"字符串对象,将其地址保存在name中
        name = "Jerry";
        //以上两句,在内存中,会有两个字符串对象"Tom"和"Jerry",没有任何字符串发生了改变,只是name引用了不同的字符串地址

        //字符串可以当作数组使用
        System.out.println(name.length());
        //字符串实际是一个字符数组对象"包装"而来
        char[] list = {'J','e','r','r','y'};
        String str2 = new String(list);
        System.out.println(name);
        System.out.println(str2);
        System.out.println(name == str2);

 

String类使用时注意

由上方案例可见,如果频繁的将一个String类型变量的值进行更改时,会创建很多字符串对象.效率低浪费内存.

所以正在频繁更改字符串时,不要使用String类变量.

String str="";
for(int i =0;i<=10000;i++){
    str+=i;
}

如果要频繁更改字符串,使用StringBullder类或者StringBuffer类

如何创建字符串对象

1.使用""赋值创建

String="abc";

2.通过构造方法创建

常用构造方法说明
String()创建一个空白字符串对象
String(String str)创建一个指定字符串的字符串对象
String(char[] list)创建一个指定字符数组的字符串对象
String(byte[] list,String charsetName)按指定的编码格式的字符串对象

String str = "ab";

使用=赋值时,str对象保存的是在堆中的字符串常量池中的地址.

String str = "a"+"b"; 等同于String str = "ab";

String str = "a"+new String("b");

使用+拼接的字符串在编译后会成为一个整体,当+拼接的不是""而是一个对象时.

1.当编译时,发现+中有对象参与时,会先创建new StringBuilder()对象.

2.再在字符串常量池中定义"a","b".

3.会在堆中新创建一个String对象保存"b",

4.再使用创建的StringBuilder() 调用append方法将"a"与new String()的结果拼接保存在该StringBuilder()对象中,最后将new StringBuilder()的地址赋予给str

 

String str = new String("ab");

而使用new 的方式时,会在堆中创建一个String对象,将该对象指向字符串常量池中的地址,再将该String对象的地址赋值给str

 

可以使用jdk中地带的反编译工具javap对class文件进行反编译

在class文件所在目录下(项目的Out目录中),进入控制台,输入 javap -c 字节码文件名.class

 

字符串String类中的常用方法

方法名返回值作用备注
length()int得到字符串的长度
toLowerCase()转换后的字符串将字符串转换为小写不会改变原本的字符串
toUpperCase()转换后的字符串转换为大写同上
trim()去除前后空格后的字符串去除首尾所有空格同上,中间的空格不会去掉
isEmpty()true/false判断是否为空白字符串
getBytes()byte[ ]转换为字节数组字母用ASCII码,汉字默认在UTF-8编码下一个汉字占3个字节
toCharArray()char[ ]转换为字符数组
equalsIgnoreCase(String str)true/false忽略大小写判断两个字符串是否相同验证码
charAt(int index)char返回index索引的字符
equals(String str)true/false判断两个字符是否相同字面值
indexOf(String str)int返回str出现的index索引,没有则返回 -1只会返回第一次出现的
(int i)同上i 参考ASCII码
(String str,int fromIndex)同上由指定索引fromindex开始查找
lastIndexOf(String str)int返回str出现的index索引,没有则返回 -1最后一次出现的
contains(字符序列)true/false判断字符串中是否存在指定字符序列
concat(String str)String将指定字符串拼接到原字符串末尾
startsWith(String str)true/false判断字符串是否以指定字符串开头
endsWith(String str)true/false判断字符串是否以指定字符串结尾
subString(int beginIndex)String返回由指定索引beginIndex开始截取至末尾的字符串不包括索引为beginIndex的字符
subString(int beginIndex,int endIndex)String返回由指定索引beginIndex开始截取至endIndex的字符串不包括索引为beginIndex的字符,包括索引为endIndex的字符
split(String regex)String[ ]按照regex对字符串切分为一个字符串数组regex是正则表达式
replace(char oldChar,char newChar )String将字符串中的所有指定字符替换为新的字符
valueOf(所有类型)String将任意参数转换为字符串该方法为静态方法
format(String format,Object... obj)Stringformat一种格式,%a,bf,表示四舍五入保留b位小数,整体占a位%5.2f表示保留2位小数,整个数据只占5为,不足5位在最前补空格

可变字符串

String字符串是一个常量,在定义后,值不可改变.

如果使用String对象,对其频繁更新时,就会不停的创建新的对象,不停引用给同一个变量.

StringBuilder是一个对象,全程都是在操作StringBuilder类

总结

在使用字符串时,如果要比较值,建议不用 == 判断,因为 == 判断是内存地址.

如要频繁操作同一个字符串时,一定要使用可变字符串,StringBuider或StringBuffer的对象,不能使用String的对象

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值