首页 > 其他 > 详细

常用类-String类(1)

时间:2020-09-11 23:52:01      阅读:103      评论:0      收藏:0      [点我收藏+]

String类

概念

  • 字符串是常量,创建之后不可改变

  • 字符串字面值存储在字符串池中,可以共享

  • 图解

    • jvm内存中堆、栈、方法区这三个储存空间,字符串字面值存储在字符串池中

      技术分享图片

    • String s1 = "a";直接创建一个值为"a"的字符串s1s1进栈,若字符串池中有"a",则s1指向该地址,若没有,则在字符串池中新开辟一个空间存储"a"s1指向该地址

      技术分享图片

    • s1 = "b";,将s1赋值为"b",这并不是将字符串池中的"a"改变为"b",而是在字符串池中新开辟一个空间,存储"b",让s1指向"b",而"a"没有其他量引用的话将被判定为垃圾,通过垃圾回收机制回从而收释放空间

      技术分享图片

    • String s = "b";,因为字符串池中存在"b",不需要再开辟新空间,所以s指向的地址与s1指向的地址相同,此时s==s1返回为true,这就是字符串常量的共享

      技术分享图片

    • String s2 = new String("c");,通过new String(String original)方式声明字符串可以理解为产生两个对象,堆和常量池中各开辟一个空间存储"c"s2指向堆中的对象。

      技术分享图片

    • String s3 = new String("c");,此时s3==s2输出为false

      技术分享图片

    • 因为通过new String(String original)创建字符串会产生两个对象,所以可能会造成空间浪费

常用方法(1)

  • 技术分享图片

    • 源码

      public char charAt(int index) {
          if ((index < 0) || (index >= value.length)) {
              throw new StringIndexOutOfBoundsException(index);
          }
          return value[index];
      }
      
  • 技术分享图片

    • 源码

      public int length() {
          return value.length;
      }
      
  • 技术分享图片

    • 源码

      public boolean contains(CharSequence s) {
          return indexOf(s.toString()) > -1;
      }
      
  • 例子

    //String 常用方法
    String content = "Java是世界上最好的编程语言";
    //length()返回此字符串的长度。
    System.out.println(content.length());//输出16
    //charAt(int index) 返回指定索引处的 char 值。
    System.out.println(content.charAt(0));//输出J
    //contains(CharSequence s)当且仅当此字符串包含指定的 char 值序列时,返回 true。
    System.out.println(content.contains("Java"));//输出true
    System.out.println(content.contains("php"));//输出false
    

常用方法(2)

  • 技术分享图片

    • 源码

      public int indexOf(String str) {
          return indexOf(str, 0);
      }
      
  • 技术分享图片

    • 源码

      public int lastIndexOf(String str) {
          return lastIndexOf(str, value.length);
      }
      
  • 技术分享图片

    • 源码

      public char[] toCharArray() {
          // Cannot use Arrays.copyOf because of class initialization order issues
          char result[] = new char[value.length];
          System.arraycopy(value, 0, result, 0, value.length);
          return result;
      }
      
  • 例子

    //String 常用方法2
    String str = "Java是世界上最好的编程语言,Java真香,就好Java,别的咳嗽!";
    //indexOf(String str)返回指定子字符串在此字符串中第一次出现处的索引。
    System.out.println(str.indexOf("Java"));//输出0
    //indexOf(String str, int fromIndex)返回指定子字符串在此字符串中第一次出现处的索引,从指定的索引开始。
    System.out.println(str.indexOf("Java",4));//输出16
    //lastIndexOf() 返回指定子字符串在此字符串中最右边出现处的索引。
    System.out.println(str.lastIndexOf("Java"));//输出25
    //toArrays()将此字符串转换为一个新的字符数组。用数组的toString()方法输出,否则看不到效果
    System.out.println(Arrays.toString(str.toCharArray()));//输出[J, a, v, a, 是, 世, 界, 上, 最, 好, 的, 编, 程, 语, 言, ,, J, a, v, a, 真, 香, ,, 就, 好, J, a, v, a, ,, 别, 的, 咳, 嗽, !]
    

常用类-String类(1)

原文:https://www.cnblogs.com/c1ao/p/13655056.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!