zoukankan      html  css  js  c++  java
  • String

    String类实现了三个接口,分别是序列化 Serializable ,自然顺序  Comparable<String>,和字符序列 CharSequence。

    String类代表字符串。Java 程序中的所有字符串字面值(如 "abc" )都作为此类的实例实现。字符串是常量;它们的值在创建之后不能更改。

    因为 String 对象是不可变的,所以可以共享。例如:

         String str = "abc";

    等效于:

         char data[] = {'a', 'b', 'c'};

         String str = new String(data);

    字符串的本质是字符数组。查看源码可以看到String类有一个char类型的数组作为成员变量,用final修饰代表字符串不可变。

     在JDK9中,源码已经变为byte数组

     

    字符串常量池

    String s1 = new String(“abc”); //这句话创建了两个对象,一个是new String,一个是对象”abc”,而new String保存的就是对象”abc”的内存地址。

    (new String(“abc”)调用的是String类的有参构造方法,参数是String类型的对象,此对象在字符串常量池中先创建出来,new String的时候拷贝一份到堆中,所以是两个对象)

    String s2 =“abc”; //创建字符串的时候,JVM会先寻找字符串常量池中是否有这个对象,若有,则直接将变量指向这个内存地址,故s2指向了字符串常量池中已有的”abc”字符串。

    堆里有一个小区域叫常量池,用来存储常量,字符串存储在字符串常量池中。

    (常量池分为静态常量池和运行时常量池,静态常量池就是class文件中的,运行时常量池是JVM将class文件加载到方法区后,在方法区又开辟了一部分内存空间。在jdk8中,移除了方法区,转而用Metaspace区域替代) 

    String类常用方法 

    int length();//获取字符串长度

    isEmpty();//判断字符串的内容是否为空,当且仅当length()为0时返回true

    char charAt(int index) //返回字符串指定位置的字符

    String trim()  //去除字符串两端空格,中间的不会去除,返回一个新字符串

    String toUpperCase() //将字符串转为大写

    String toLowerCase() //将字符串转为小写

    boolean contains(CharSequence s);//字符串中是否包含另一个字符串。如果s为null,抛出NullPointerException;如果s为空字符串,则返回true

    //截取字符串

    String substring(int beginIndex,int endIndex);//截取索引范围为[beginIndex,endIndex)的字符串。当beginIndex和 endIndex相同时,返回空字符串。

    String substring(int beginIndex);//截取字符串,从beginIndex开始(包含beginIndex)直到末尾

    //判断字符串是否以指定字符串开头或结尾 

    boolean startsWith(String prefix);

    boolean endsWith(String suffix);

     //indexOf 字符串查找方法,如果未出现指定字符或字符串,则返回-1

    public int indexOf(String str);//返回指定子字符串在此字符串中第一次出现处的索引

    public int indexOf(int ch);//返回指定字符第一次出现的字符串内的索引。 (ASCII转换)

    public int indexOf(int ch,int fromIndex);//返回指定字符在此字符串中第一次出现处的索引,从指定的索引开始搜索

    public int indexOf​(String str,int fromIndex);//返回指定子字符串在此字符串中第一次出现处的索引,从指定的索引开始搜索

    //将字符串转成一个字符数组或字节数组

    byte[]  getBytes();

    char[]  toCharArray();

    //判断两个字符串中的内容是否相同

    boolean  equals(Object anObject);//将此字符串与指定的对象比较。当且仅当该参数不为null,并且是与此对象表示相同字符序列的String对象时,结果才为true。

    boolean  equalsIgnoreCase(String anotherString);//将此String与另一个String比较,不考虑大小写。

    //字符串替换方法 

    String replace(char oldChar,char newChar) //替换指定字符

    String replace(CharSequence target,CharSequence replacemnet) //替换指定字符串

  • 相关阅读:
    继承 多态
    封装练习
    PHP 面向对象封装
    面向对象 类和对象
    PHP前端和数据库的连接
    数组2
    PHP数组
    正则表达式
    PHP字符串
    linux基础
  • 原文地址:https://www.cnblogs.com/shizunatsu/p/14363263.html
Copyright © 2011-2022 走看看