Java的字符串类

Java的字符串类

字符串类的特点

  • 一致性:在任何系统平台都保证字符串本身以及对字符串的操作是一致性的。
  • 健壮性:可以自动捕获异常。
  • 不可派生性:都被声明为final类,不能派生子类,以防用户修改其功能。

String类

String类的基本方法

(1)toUpperCase: 字母变大写
(2)toLowerCase: 字母变小写
(3)toCharArray: 变字符数组(还有getBytes()方法)
(4)charAt: 获取某个字符
(5)subString: 字符串的截取
(6)split: 字符串的分割
(7)replace:替换
(8)match:匹配测试
(9)replaceAll :全替换
(10) indexOf: 字符所在字符串的位置(下标值)(第一个)
(11)copyValueof():数组复制到字符串
(12)equals():字符串的比较,返回boolean值
(13)compareTo():字符串的比较,返回整形数
(14)length():获取字符串的长度
(15)concat():字符串连接,如"to".concat(“get”).concat(“her”)返回"together"
(16)Valueof():转换为字符串

    /**
     * String
     */
    public static void method01(){
        String str="safgwe5452df1g45e2s4f5";
        //截取 subString
        System.out.println(str.substring(3,7));
        System.out.println(str.substring(3));

        //分割 split
        String[] ss=str.split("f");
        System.out.println(Arrays.toString(ss));

        //替换 replace
        System.out.println(str.replace('f','F'));//替换字符
        System.out.println(str.replace("fg","abcd"));//替换字符串

        //字符所在下标indexOf 不存在返回-1,存在返回下标值
        System.out.println(str.indexOf('f'));//第一个
        System.out.println(str.lastIndexOf('f'));//最后一个
        System.out.println(str.indexOf('f',2));
        int index=str.indexOf("f")+1;
        System.out.println(index+(str.substring(index).indexOf("f")));

        //包含 contains
        System.out.println(str.contains("A"));

    }

在这里插入图片描述

String类的不可变性

1、不可变性

  • String类是一个用final修饰的类,表示它是一个最终类,不可以被任何子类继承,同时也是不可改变的。

我们来看一下下面的例子:

public static void method02(){
        String str1 = "Are you ";
        str1 = str1 + "study";
        str1 += "?";
        System.out.println(str1);
    }

在这里插入图片描述
这个例子中str1的值改变了,那他与上面所说的不可变矛盾了吗?其实并没有,当一个旧的字符串再次赋值时,它并没有在原来的内存地址上修改里面的数据,而是重新创建一个新的对象,产生新的地址,str变量只是String对象的一个引用,并不是对象的本身。对象在内存中是一块内存块,它的成员变量越多,这块内存区占的空间就越大。

  • str是一个4个字节的数据,里面存放着它所指向的对象的地址,通过这个地址可以访问这个对象。
    扩展
    String类型的变量占用内存的4个字节,但用getBytes()计算的话,一个字母或者数字的长度为1,一个中文长度为3个字节,但是char类型占用内存2个字节,但也就可以存储一个中文字符,(至于为为什么我也不懂),另外在时vs2012中28个字节,G++中编译为4个字节,具体可以点击这里了解其他博主的测试
  • str指向了最新生成的实例对象,之前存在的对象仍然存在,如果没有再次被引用,则会被垃圾回收机制回收
    总结:
    不可变类只是它的实例不能被修改的类,String类给str重新赋值 的仅仅是改变它的引用而已,并没有改变它原来地址上面的的值。

StringBuffer类与StringBuilder类

String ,StingBuffer,StringBuilder的区别:

String :是一个final类
 StringBuffer: 可变长度且线程安全的字符序列,性能上效率低,但是安全
 (有线程安全锁(synchronized))
 StringBuilder:可变长度且非线程安全的字符序列,性能效率高,安全性低
 (没有线程安全锁(synchronized))
 StringBuffer 与StringBuilder的方法基本相同
    /**
     * 并不是直接修改String 的值,
     * 而是创建一个新的String覆盖原来的String
     */
    public static void method02(){
        String a="1";

        a="123";
        System.out.println("a="+a);
        StringBuffer sb=new StringBuffer("");
        sb.append("abc").append("asf");//追加
        sb.insert(1,"_");//插入
        sb.append("你好吗");
        sb.deleteCharAt(4);//删除一个字符
        sb.delete(3,5);
        sb.reverse();//翻转
        System.out.println("sb="+sb.toString());
    }
}

![在这里插入图片描述](https://img-blog.csdnimg.cn/20210620155024340.png

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值