• java字符串


    java字符串

    一、String类

    概述:字符串是由多个字符组成的一串数据(字符序列),它可以看成是一个字符数组。Java程序中的所有字符串面值(如:“abc”)都可以看成是一个字符串对象。

    String str = "abc";
    相当于:
    char data[] = {
       'a', 'b', 'c'};
    String str = new String(data);
    // String底层是靠字符数组实现的。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    一)特点

    • String类被final修饰,不可被继承
    • 字符串是不可变序列,是常量,一旦被赋值,就不能被改变。(其值不能改变,但是String类型的引用所指向的地址值可以发生改变)
    • 字符串字面值存放在方法区中的字符串常量池,字符串常量池中一定不存在两个相同的字符串
    public static void main(String[] args) {
       
       String name = "zhangsan";
        /**
         * 重新赋值时,并不是直接在原地址上覆盖zhangsan,而是在字符串池中
         * 找到(创建)lisi,然后把lisi的地址赋值给name,从而实现新的赋值过程
         */
        name = "lisi";
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    注意:当我们重新赋值时,并不是直接修改他的字面值,因为字面值是不可改变的,而是通过重新开辟一个空间,把新空间的地址赋值给变量,这就是不可变性

    二)构造方法

    方法 描述
    String(); 无参构造
    String(byte[] bytes); 把字节数组转换成字符串
    String(byte[],int offset,int length); 把字节数组的一部分转换成字符串
    String(char[] value); 把字符数组转换成字符串
    String(char[] value,int offset,int count); 把字符数组的一部分转换成字符串
    String(String original); 把字符串常量转换成字符串

    示例:

    // 直接创建
    String s = "abc";// 创建一个字符串对象abc,放在方法区字符串常量池中
    // 通过构造器传字符串的创建
    String s1 = new String("abc");// 在堆中创建一个字符串对象,然后在常量池中找到并返回abc对象
    // 通过字符数组构造
    char chars[] = {
       'a', 'b', 'c'};
    String str2 = new String(chars);// 在堆中创建一个字符串对象,然后在常量池中找到并返回abc对象
    // 通过字节数组构造
    byte bytes[] = {
        97, 98, 99 };
    String str3 = new String(bytes);// 在堆中创建一个字符串对象,然后在常量池中找到并返回abc对象
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    注意:字符串直接赋值的方式是先到方法区的字符串常量池里面查找,如果有就直接返回,如果没有就创建并返回。

    String str = “abc”;String str2 = new String(“abc”);的区别
    • String str = “abc”:可能创建一个或者不创建对象。直接到方法区的字符串常量池里面查找,如果abc 在字符串池中存在, str直接指向这个内存地址;如果abc在字符串池中不存在,会在java字符串池中创建一个String对象abc,然后str指向这个内存地址,无论以后用这种方式创建多少个值为abc的字符串对象,始终指向的都是该内存地址,即以""方式给出的字符串,只要字符序列相同(顺序和大小写),无论在程序代码中出现几次,JVM 都只会建立一 个 String 对象,并在字符串池中维护。
    • String str = new String(“abc”):至少会创建一个对象,也有可能创建两个。因为用到new关键字,肯定会在堆中创建一个String对象,如果字符池中已经存在abc,则不会再字符串池中创建一个String对象,如果不存在,则会在字符串常量池中也创建一个对象。

    在这里插入图片描述

    三)常用方法

    方法名 描述
    int length() 返回字符串的长度
    char charAt(int index) 根据下标获取字符
    int indexOf(String str) 查找str首次出现的下标,存在,则返回该下标;不存在,则返回-1
    int indexOf(int ch,int fromIndex); 查找指定字符在指定位置后第一次出现处的索引
    int indexOf(String str,int fromIndex); 查找指定字符串在指定位置后第一次出现处的索引
    char[] toCharArray() 将字符串转换成数组。
    byte[] getBytes(); 把字符串转换为字节数组
    static String valueOf(...); String类的valueOf方法可以把任意类型的数据转换为字符串
    String trim() 去掉字符串前后的空格
    String toLowerCase(); 把字符串转换为小写
    String toUpperCase() 把字符串转换为大写
    String replace(String oldString,String newString) 把字符串中的子字符串替换为新的子字符串,原字符串不变
    String[] split(String str) 根据str做拆分,如空格符或给定正则表达式的匹配拆分此字符串
    String concat(String str); 把字符串进行拼接
    String subString(int beginIndex,int endIndex) 在字符串中截取出一个子字符串,范围[beginIndex,endIndex),包含开始,不含结束
    boolean equals(Object obj); 比较字符串的内容是否相同,区分大小写
    boolean equalsIgnoreCase(String str); 比较字符串的内容是否相同,忽略大小写
    int compareTo(String str); 按字典顺序比较两个字符串
    boolean contains(String str) 判断当前字符串中是否包含str
    boolean startsWith(String str); 判断字符串是否以某个指定的字符串开头
    boolean endsWith(String str) 判断字符串是否以str结尾
    boolean isEmpty(); 判断字符串内容是否为空
    native String intern(); 直接指向常量池

    new String()的一些参考:

    演示:

    System.out.println("---------字符串方法的使用 1-------------");
            //字符串方法的使用
            //1、length();返回字符串的长度
            //2、charAt(int index);返回某个位置的字符
            //3、contains(String str);判断是否包含某个子字符串
            String content = "java是世界上最好的java编程语言,java真香";
            System.out.println(content.length()); // 26
            System.out.println(content.charAt(content.length() - 1)); // 香
            System.out.println(content.contains("java")); // true
            System.out.println(content.contains("php")); // false
    
            System.out.println("--------字符串方法的使用 2--------------");
            //字符串方法的使用
            //4、toCharArray();返回字符串对应的数组
            //5、indexOf();返回子字符串首次出现的位置
            //6、lastIndexOf();返回字符串最后一次出现的位置
            System.out.println(Arrays.toString(content.toCharArray()));
            System.out.println(content.indexOf("java")); // 0
            System.out.println(content.indexOf("java", 4)); // 11
            System.out.println(content.lastIndexOf("java"));// 20
    
            System.out.println("------------字符串方法的使用3------------------");
    
            //7、trim();去掉字符串前后的空格
            //8、toUpperCase();//把小写转成大写 toLowerCase();把大写转成小写
            //9、endWith(str);判断是否已str结尾,startWith(str);判断是否已str开头
            String content2 = "   hello World   ";
            System.out.println(content2.trim()); // hello World
            System.out.println(content2.toUpperCase()); // HELLO WORLD
            System.out.println(content2.toLowerCase
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
  • 相关阅读:
    Invalid parameter not satisfying: “assetUUID“
    【Linux】服务器恶意登录记录及解决方案
    23、Mybatis查询功能4(查询结果为一个map集合(多条数据))
    MySQL 连接出现 Authentication plugin ‘caching_sha2_password的处理方法(使用第二种)
    odoo16前端框架源码阅读——rpc_service.js
    Web服务器——踩过的坑(一)
    Java格式化字符串嵌入变量
    Java版分布式微服务云开发架构 Spring Cloud+Spring Boot+Mybatis 电子招标采购系统功能清单
    easyrecovery数据恢复软件免费版下载
    JavaScript之函数、返回值、变量作用域、立即执行函数
  • 原文地址:https://blog.csdn.net/m0_51779342/article/details/126860046