Java常用类1

Java常用类1

字符串相关的类

String(代表字符串)

理解String的不可变性

  • String是一个final类,代表不可变的字符序列(不可变性)

  • 字符串是常量,用“”引起来。在创建后不能更改(不可继承)

  • String对象的字符串内容是存储在一个字符数组value[]中的(final char[] valve)

  • String实现了Serializable接口:表示字符串是支持序列化的

    ​ 实现了Comparable接口:表示String可以比大小-

  • 通过字面量赋值(不同于new),此时的字符串值是在字符串常量池中(不会右有两个相同的常量)

public static void main(String[] args) {
        String s1 = "abc";//字面量的定义方法
        String s2 = "abc";
         System.out.println(s1==s2);//比较s1和s2的地址是否相等
        s1 = "hello";//当对字符串重新赋值时,要重写指定内存区赋值
        System.out.println(s1);
        System.out.println(s2);
        System.out.println(s1==s2);
        System.out.println("=====================================");

        String s3 = "abc";
        s3 += "def";//当对现有的字符串进行连接操作时,也要重写指定内存区赋值
        System.out.println(s3);
        System.out.println(s2);
        System.out.println("=====================================");

        String s4 ="abc";
        String s5 = s4.replace("a","m");//当调用String的replace方法修改,也要重写指定内存区赋值
        System.out.println(s4);
        System.out.println(s5);
    }

String对象的创建

String的实例化

  1. 字面量定义
  2. new+构造器
public static void text2(){
        //通过字面定义:此时的S1,S2的数据JavaEE声明在方法区的字符串常量池中
        String s1 = "javaEE";
        String s2 = "javaEE";
        //通过new:此时的s3,s4保存的地址值,是在堆空间中开辟空间以后对应的地址值
        String s3 = new String("javaEE");
        String s4 = new String("javaEE");

        System.out.println(s1==s2);//true
        System.out.println(s1==s3);//flase
        System.out.println(s1==s4);//flase
        System.out.println(s3==s4);//flase
    }

p1和p2的地址是一样的(”Tom“是字面量赋值)

注:String s = new String("abc")在内存中创建了2个对象

  1. 堆空间中new的

  2. 另一个char[]对应常量池中的"abc"

String的拼接

结论:

  • 常量与常量的拼接结果在常量池
  • 有变量参与,结果在堆中
  • intern()方法,返回值在常量池中
public static void text3(){
        String s1 = "javaEE";
        String s2 = "hadoop";

        String s3 = "javaEEhadoop";
        String s4 = "javaEE"+"hadoop";
            
        /*有变量参与在堆空间中(final修饰的话就是常量了)*/
        String s5 = s1+"hadoop";
        String s6 ="javaEE"+s2;
        String s7 = s5.intern();

        System.out.println(s3==s4);
    
        System.out.println(s3==s5);
        System.out.println(s3==s6);
        System.out.println(s5==s6);
        
        System.out.println(s7==s3);
    }

Stringd的常用方法

        String s1 = "HelloWorld";
        System.out.println(s1.length());
        System.out.println(s1.charAt(0));
        System.out.println(s1.isEmpty());
        System.out.println("=========================");

        String s2 = s1.toLowerCase(Locale.ROOT);
        System.out.println(s2);
        System.out.println("=========================");

        String s3 = "  hello world  ";
        String s4 =s3.trim();//去向后空给
        System.out.println("--"+s3+"--");
        System.out.println("--"+s4+"--");
        System.out.println("=========================");

        System.out.println(s1.equalsIgnoreCase(s2));//是否相等(忽略大小写)
        System.out.println("=========================");

        System.out.println(s1.compareTo(s2));//比大小S1-s2(字符串排序)
        System.out.println("=========================");

        System.out.println(s1.substring(5));//去后面的子串
        System.out.println(s1.substring(0,5));//左闭右开
        System.out.println("=========================");

        String s_1 ="helloworld";
        boolean b_1 = s_1.endsWith("ld");//是否以指定字符结尾
        System.out.println(b_1);
        boolean b_2 = s_1.startsWith("ll",2);//是否以指定索引开始
        System.out.println(b_2);
        System.out.println("=========================");

        String s_2 ="ll";
        System.out.println(s_1.contains(s_2));//是否包含此字符串
        System.out.println("=========================");

        System.out.println(s_1.indexOf("lo"));//第一次出现的索引(存在情况)
        System.out.println(s_1.indexOf("lo",5));//从5开始找
        System.out.println(s_1.lastIndexOf("lo"));//从后往前找,从前往后排
        System.out.println(s_1.lastIndexOf("lo",6));//在6之前从右向左找,从左往右排
        //indexOf和lastIndexOf相同:1.只有一个  2.不存在(为负数)
        System.out.println("=========================");

        //替换
        String s01 = "你好,wht";
        String s02 = s01.replace("你好","再见");
        System.out.println(s01);
        System.out.println(s02);
        String s03 = s01.replaceAll(",",";");//修改其中的字符
        System.out.println(s03);
        System.out.println("=========================");

        //匹配
        String s__1 = "12345";
        boolean matches = s__1.matches("\\d+");//是否全是数字(+:多个)
        System.out.println(matches);
        String tel = "0351-1345678";
        boolean result = tel.matches("0351-\\d{7,8}");
        System.out.println(result);
        System.out.println("=========================");

        //切片
        String s001 = "hello,wpod,java";
        String[] s002 = s001.split("\\,");
        for (int i = 0; i < s002.length; i++) {
            System.out.println(s002[i]);
        }

String和其他类型(结构)的转换

String与基本数据类型
  • String-->基本数据类型:调用包装类的方法:parseXxx(字符串)
    
  • 基本数据类型-->String:调用valueOf(xxx) 或是连接符
    
        String s1 = "123";
        int s2 = Integer.parseInt(s1);
        String s3 = String.valueOf(s2);//+""也可以
tring与char[]
  • String-->char[]:调用toCharArray()
    
  • char[]-->String:/调用String构造器
    
        String s01 = "abc123";
        char[] s02 =s01.toCharArray();
        for (int i = 0; i < s02.length; i++) {
            System.out.print(s02[i]);
        }

        System.out.println();
        char[] s03 =new char[] {'h','e','l','l','o'};
        String s04 = new String(s03);
        System.out.println(s04);

* String与byte[](字节) (编码集和解码集必须一致)
  • String-->byte[](编码):调用getBytes()
    
  • char[]-->byte[](解码):调用String的构造器
    
        String s_1 = "abc123你好";
        byte[] s_2 = s_1.getBytes();
        System.out.println(Arrays.toString(s_2));
        String s_3 = new String(s_2);
        System.out.println(s_3);

posted @ 2022-02-11 20:58  T,a,o  阅读(38)  评论(0编辑  收藏  举报