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) //替换指定字符串

 

posted @ 2021-02-03 17:07  绮丽梦境  阅读(492)  评论(0编辑  收藏  举报