String类时lang包的内置类,使用时不需要引用。

一、构造器

String():通过new方法创建字符串

String(byte[] byte):把字节数字转换为字符串

异同比较:

String str="abc";

String str1=new String("abc");

str 与str1有什么异同。

首先,str==str1,是否成立。不成立。

其次,str.equals(str1),是否成立。成立。

为什么?

因为String类的equals()方法比较的是值是否相等,很明显,str与str1的值相等。

为什么str==str1不成立呢。因为String str="abc" 与 String str1=new String("abc")两种创建String类对象的底层方法是不同的。先说String str="abc" 这种创建String类对象的方法。此种方法创建对象,首先在常量池中搜索是否有“abc”字符串,如果有,则把该字符串的地址返回给栈。如果没有则创建一个"abc"字符串,然后把地址返回给栈引用。

而new String()方法,首先在堆中创建一个对象,然后再去搜索常量池中是否有“abc”字符串,如果有,则把该字符串的地址返回给堆中的对象。如果没有则创建一个"abc"字符串,然后把地址返回给堆中的对象。此时栈保存的堆中对象的地址。

很明显,new String()方法创建的对象地址是堆中的地址,而另一种方法对象的地址是常量池中地址。很明显,两个地址是不同的。

另外,String str="abc"创建一个对象,而String str1=new String("abc")有可能创建了两个对象(在堆中创建了一个对象,如果常量池中没有“abc”字符串,还需要在常量池中创建一个对象)。

二、常用方法

int length():活动字符串的长度,注意与获得数组长度的区别,获得数组长度不需要括号

char charAt(int index):获得指定索引的字符

int codePointAt(int index):获得指定索引的字符的ASCII码

int compareTo(String anotherstring):与另外一个字符串比较,如果<0,说明在被比较字符串之前;=0,则相等;>0,说明在被比较字符串之后。

int compareToIgnoreCase(String anotherstring):比较时不区分大小写

boolean startsWith():是否以某个子字符串开始

boolean endtsWith():是否以某个子字符串介绍

s.trim():去掉s字符串前后的空格,并返回一个新字符串

boolean s.equals():比较两个字符串的值是否相等;

int indexOf(int ch):返回指定字符的第一个索引。需要注意的是,可以用字符,也可以同字符的ASCII码

eg.

String str="hello world";

int int1=str.indexOf("h");

//int int2=str.indexOf(0);这两种写法是等价的

int indexOf(int ch,int fromindex):从某个索引开始检索,然后返回指定字符的索引。注意包含fromindex索引。

 int indexOf(String str):返回指定子字符串的第一个索引。

 int indexOf(String str,int fromindex):从某个索引开始检索,然后返回指定子字符串的索引。

String substring(int beginindex,int endindex):返回从beginindex(含)到endindex(不含)的子字符串。

String replace(char oldchar ,char newchar):把字符串中的所有oldchar换成newchar并返回一个新字符串

String replace(charsequnce target,charsequence replacement):将字符串中的所有target换成replacement并返回一个新字符串

static String  valueOf(boolean a):将一个布尔值转化为字符串形式,静态方法。由于是静态方法,使用该方法是需要类调用。如:String .valueOf(b)

static String valueOf(char a):返回字符a的字符串形式