自学JAVA知识点总结 - 初级

编程语言5天前更新 AaronHzy
152 0

面向对象 - String类和常量池

String类

  • String类基础:String类又被称作不可变字符序列,Java字符串就是Unicode字符序列;Java没有内置的字符串类型,而是在标准Java类库中提供了一个预定义的类String,每个用双引号括起来的字符串都是String类的一个实例;String位于java.lang包中,Java程序默认导入java.lang包下的所有类。
    package me.hzyis.test;
    public class Test {
      public static void main(String[] args) {
        String a = "测试"; //定义字符变量
        String b = new String("测试2"); //创建String类对象
        String c = "测试"+"3"; //字符串拼接
        String d = "测试"+4; //有一个字符串,+号则变为字符串连接符
        System.out.println(a+"\r\n"+b+"\r\n"+c+"\r\n"+d);
      }
    }
    package me.hzyis.test;
    public class Test {
      public static void main(String[] args) {
        String s1 = "core Java";
        String s2 = "Core Java";
        System.out.println(s1.charAt(3)); //提取下标为3的字符,从0开始索引,所以第三个值为"e",不可为负数
        System.out.println(s2.length()); //字符串的长度,算上空格共10个字符
        
        System.out.println(s1.equals(s2)); //比较两个字符串是否相等
        System.out.println(s1.equalsIgnoreCase(s2)); //比较两个字符串是否相等(忽略大小写)
        
        System.out.println(s1.indexOf("Java")); //字符串s1中是否包含"Java"字符,如果存在返回指定字符在序列的位置
        System.out.println(s1.indexOf("java")); //字符串s1中是否包含"java"字符,如果没有返回-1
        
        String s = s1.replace(' ','&'); //将s1中的空格替换为&符号,替换后赋值给s,s1不会有任何变化
        System.out.println("result is:" + s);
        System.out.println("\r\n****************************\r\n");
        
        String st = "";
        String st1 = "How are you?";
        System.out.println(st1.startsWith("How")); //是否以How开头
        System.out.println(st1.endsWith("you")); //是否以You结尾
        
        st = st1.substring(4); //从下标为4的字符开始 到 字符串结尾为止,提取子字符串
        System.out.println(st);
        st = st1.substring(4,7); //提取下标是4到7,包括4不包括7的字符串
        System.out.println(st);
        
        st = st1.toLowerCase(); //全部转小写
        System.out.println(st);
        st = st.toUpperCase(); //全部转大写
        System.out.println(st);
        
        String st2 = " How old are you!! ";
        st = st2.trim(); //去除首尾空格,无法去除中间的空格
        System.out.println(st); //st2不变,生成新的st字符串输出
        System.out.println(st2); //因为String是不可变字符序列,所以st2不变
      }
    }

常量池

  • 全局字符串常量池(String pool):全局字符串常量池中存放的内容是在类加载完成后存到String Pool中的,在每个VM中只有一份,存放的是字符串常量的引用值(在堆中生成字符串对象实例)。
  • class文件常量池(Class Constant Pool):class常量池是在编译的时候每个class都有的,在编译阶段,存放的是常量(文本字符串、final常量等)和符号引用。
  • 运行时常量池(Runtime Constant Pool):运行时常量池是在类加载完成之后,将每个class常量池中的符号引用值转存到运行时常量池中,也就是说,每个class都有一个运行时常量池,类在解析之后,将符号引用替换成直接引用,与全局常量池中的引用值保持一致。
    package me.hzyis.test;
    public class Test {
      public static void main(String[] args) {
        String test1 = "abc";
        String test2 = "abc";
        String test3 = new String("abc");
        System.out.println("是否相同:" + (test1==test2)); //test1和test2处在相同对象中,所有为true
        System.out.println("是否相同:" + (test3==test2)); //test3是不同对象,所以为false
      }
    }

© 版权声明

相关文章