String类详解

String类

定义
  1. String对象用于保存字符串,也就是一组字符序列

  2. 字符串常量对象是用双引号括起的字符序列。例如:“你好”、“12.97”."boy"等

  3. 字符串的字符使用Unicode字符编码,一个字符(不区分字母还是汉字)占两个字节

  4. String类较常用构造器(其它看手册):
    String s1 = new String0);1l
    String s2 = new String(String original);String s3 = new String(char[ a);

String s4 = new String(charla,int startlndex,int count);

  1. String 类实现了接口 Serializable【String 可以串行化:可以在网络传输

  2. String 是 final 类,不能被其他的类继承

  3. String 有属性 private final char value[]; 用于存放字符串内容

  4. 一定要注意:value 是一个 final 类型, 不可以修改(需要功力):即 value 不能指向新的地址,但是单个字符内容是可以变化

package string;

public class String01 {
    public static void main(String[] args) {
        String name = "jack";
        name = "tom";
        final char[] value = {'a','b','c'};
        char[] v2 = {'t','o','m'};
        value[0] = 'H';
        //value = v2; 不可以修改 value 地址
    }
}

测试

package string;

public class String01 {
    public static void main(String[] args) {
        String a = "abc";
        String b = "abc";
        System.out.println(a == b);//T
        System.out.println(a.equals(b));//T

        String c = new String("abc");
        String d = new String("abc");
        String e = "abc";
        System.out.println(c.equals(d));//T
        System.out.println(c == d);//F
        System.out.println(c.equals(e));//T
        System.out.println(c == e);//F

    }
}

编译结果

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-w1KIjSkI-1682307938162)(C:\Users\22014\AppData\Roaming\Typora\typora-user-images\image-20230424104117219.png)]

  1. String是一个final类,代表不可变的字符序列
    2)字符串是不可变的。一个字符串对象一旦被分配,其内容是不可变的.1.以下语句创建了几个对象?画出内存布局图。
    String s1 = “hello”;
    s1=“haha”; l/1min//创建了2个对象.

    内存图

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rRO6aK1F-1682307938163)(C:\Users\22014\AppData\Roaming\Tencent\QQ\Temp\D375E21A02C70606BBE3895072C5B807.jpg)]

题1
String a = “hello” +“abc”;
创建了几个对象?只有1个对象.
解读:String a = “hello”+“abc”; //==>优化等价 String a =“helloabc”;
分析
1.编译器不傻,做一个优化,判断创建的常量池对象,是否有引用指向2. String a = “hello” + “abc”; =》 String a = “helloabc”;

String a = “hello”;1/创建a对象

String b =“abc”;//创建b对象
String c=a+b;创建了几个对象?画出内存图?
1/关键就是要分析 String c =a + b;到底是如何执行的
/一共有3对象,如图。
小结:底层是StringBuilder sb = new StringBuilder();

sb.append(a);

sb.append (b);

sb是在堆中,并且append是在原来字符串的基础上追加的.重要规则,

String c1 = “ab” + “cd”;常量相加,看的是池。String c1 =a+b;变量相加,是在堆中

String常用方法
package string;

public class String01 {
    public static void main(String[] args) {
        String a = "abc";
        String b = "abc";
        String c = "Abc";
        String d = "AbAc";
        //System.out.println(a.equals(b));//区分大小写 T
        //System.out.println(a.equals(c));F
        System.out.println(a.equalsIgnoreCase(c));//T
        System.out.println("a的长度" + a.length());
        System.out.println(a.indexOf('c'));//indexOf获取字符串对象第一次出现的索引
        System.out.println(d.lastIndexOf('A'));//indexOf获取字符串对象最后一次次出现的索引
        System.out.println(a.substring(1));//截取指定范围1~2
        System.out.println(a.substring(0, 2));//截取指定范围0~2
        System.out.println(a.toUpperCase());//转成大写
        System.out.println(d.toLowerCase());//转成小写
        System.out.println(a.concat("def").concat("xyz"));//concat拼接字符
        System.out.println(a.replace("abc", "xyz"));//替换字符

        //split 分割字符串, 对于某些分割字符,我们需要 转义比如 | \\等
        String poem = "锄禾日当午,汗滴禾下土,谁知盘中餐,粒粒皆辛苦";
        // 1. 以 , 为标准对 poem 进行分割 , 返回一个数组
        // 2. 在对字符串进行分割时,如果有特殊字符,需要加入 转义符 \
        String[] split = poem.split(",");
        System.out.println(poem);
        poem = "E:\\aaa\\bbb";
        System.out.println(poem);
        split = poem.split("\\\\");
        System.out.println("==分割后内容===");
        for (int i = 0; i < split.length; i++) {
            System.out.println(split[i]);

        }
        //toCharArray 转换成字符数组
        char[]  f = a.toCharArray();
        for (int i = 0; i < f.length; i++) {
            System.out.println(f[i]);
        }
        System.out.println(a.compareTo(d));//比较字符串大小 后者大返回正数 后者小返回负数
        System.out.println(String.format(a,"%c"));//格式化字符串
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值