String

来源:互联网 发布:数据库内找账号密码 编辑:程序博客网 时间:2024/06/01 15:38

java—字符串(String)

  • String字符串是不可变的

    • a)、String类是一个final类,也即意味着String不能被继承,并且他的成员方法默认为final方法

    • b) 、String类通过char数组来保存字符串

    • 注:String对象一旦创建就固定不变,除了赋值,对String对象的任何改变都不影响原对象,相关的change操作都会生成新的对象。

  • 字符串常量池

      每当我们创建字符串时JVM会首先检查字符串常量池,如果该字符串在字符串常量池中存在,就会直接返回常量池中的实例引用;如果字符串不存在常量池中,就会实例化该字符串并且将其放到常量池中(即new创建相同字符串的String对象不会进入常量池)。

  • String的”==”与equals()比较值

      由于存在字符串常量池String可用”==”进行值比较

        String str1 = "equalss";    String str2 = "equalss";    String str3 = new String("equalss");    String str4 = new String("equalss");    //str1=str2    System.out.println((str1==str2)?"str1=str2":"str1!=str2");    //str1=str2    System.out.println((str1.equals(str2))?"str1=str2":"str1!=str2");    //str1!=str3    System.out.println((str1==str3)?"str1=str3":"str1!=str3");    //str1=str3    System.out.println((str1.equals(str3))?"str1=str3":"str1!=str3");    //str3!=str4    System.out.println((str3==str4)?"str3=str4":"str3!=str4");    //str3=str4    System.out.println((str3.equals(str4))?"str3=str4":"str3!=str4");   
  • String的intern方法

    • public String intern():返回字符串对象的规范化表示形式。
    • 调用 intern 方法时:如果池已经包含一个等于此 String 对象的字符串(该对象由 equals(Object) 方法确定),则返回池中的字符串。
      否则,将此 String 对象添加到池中,并且返回此 String 对象的引用。
    • 遵循对于任何两个字符串 str1 和 ste2,当且仅当 str1.equals(str2) 为 true 时,str1.intern() == str2.intern() 才为 true。
    • 返回值:一个字符串,内容与此字符串相同,但它来自字符串池中。

      String s1 = "ab";String str1 = new String("ab");String str2 = new String("ab");String s2 = "a"+"b";String s3 = "a";String s4 = "b";String s5 = s3+s4;System.out.println(s1.intern()==str1);//falseSystem.out.println(s1==s2);//trueSystem.out.println(s1==s2.intern());//trueSystem.out.println(str1.intern()==str2);//falseSystem.out.println(str1.intern()==str2.intern());//trueSystem.out.println(s5==s1);//falseSystem.out.println(s5.equals(s1));//true

        采用new 创建的字符串对象不进入字符串池;字符串相加的时候,都是静态字符串的结果会添加到字符串池,如果其中含有变量(如s5中的s3和s4)则不会进入字符串池中。

  • String的一些API

    • a)、常用构造方法

      • i. String string = new String();
      • ii. String string1 = new String(char[] ch);
      • iii. String string2 = new String(Strong str);
      • iv. String string3 = new String(byte[] bytes,Charset charset);
      String str1 = new String();String str2 = new String("Hello");char[] ch = {'H','e','l','l','o'}; String str3 = new String(ch);String string = new String(ch, 2, 3);
    • b)、常用的方法

      • i. char charAt(int index):返回指定索引处的char值;
      • ii. String concat(String str):指定字符串连接到此字符串的结尾(也可以用”+”连接字符串);

            String st = "Hello";    String str = "World";    String strr = st.concat(str);    System.out.println(strr);    System.out.println(st+str);    System.out.println(strr.concat("!"));
      • iii. boolean contains(String str):当且仅当次字符串包含指定的string时返回true;

      • iv. int length():返回字符串的长度;
      • v. boolean equals(String str):判断内容是否相等;
      • vi. String replace(String old,String new):替换;
      • vii. int indexOf(String str):搜索字符串出现第一次的索引值;

        String str4 = "HelloWorld1";//indexOf()方法存在返回索引值,不存在返回-1System.out.println(str4);//指定字符在字符串第一次出现的索引System.out.println(str4.indexOf('W'));//指定字符从指定索引开始搜索第一次出现指定字符的索引System.out.println(str4.indexOf('o', 5));//指定字符串在此字符串中第一次出现的索引System.out.println(str4.indexOf("W"));//指定字符串从指定索引开始搜索在此字符串中第一次出现的索引System.out.println(str4.indexOf("lo", 5));
      • viii. boolean isEmpty():是否为空;

      • ix. String[] split(String str):以参数分隔符,拆分字符串;
      • x. int lastIndexOf(String str):最后一次出现的位置;
      • xi. String substring(int i):切分字符串,从参数位置到最后;
      • xii. String trim():忽略前后空白;
      • xiii. boolean starsWith(String str):测试字符串是否以指定字符串作为前缀;
      • xiv. boolean endsWith(String str):测试字符串是否以指定字符串作为尾部;
      • xv. byte[] getBytes():使用平台的默认字符集将此 String 编码为 byte 序列,并将结果存储到一个新的 byte 数组中。
      • xvi. byte[] getBytes(Charset charset):使用给定的 charset 将此 String 编码到 byte 序列,并将结果存储到新的 byte 数组
      • xvii. byte[] getBytes(String charsetName):使用指定的字符集将此 String 编码为 byte 序列,并将结果存储到一个新的 byte 数组中。

        String chinese = "你好,世界";byte[] by = chinese.getBytes();System.out.println(Arrays.toString(by));//utf-8编码得到byte[]byte[] by1 = chinese.getBytes("utf-8");System.out.println(Arrays.toString(by1));//utf-8解码by1构造新字符串String utfChinese = new String(by1,"utf-8");System.out.println(utfChinese);
原创粉丝点击