当前位置: 代码迷 >> 综合 >> String类:字符串的并置、String类的常用方法、new到底创建了几个对象的解释
  详细解决方案

String类:字符串的并置、String类的常用方法、new到底创建了几个对象的解释

热度:32   发布时间:2024-02-28 04:16:06.0

String常量:

  1. String常量也是String对象,是用双引号括起的字符序列,例如“boy”"12"等等
  2. java会把String常量放入常量池。因为String常量是对象,所以也有自己的引用和实体
  3. 常量池简单理解:常量池中的数据在程序运行期间再也不允许改变

new到底创建了几个对象(String对象的创建):

  1. 例:String string1=new String("abc")
  2. 首先,jvm先去常量池检查是否有”abc“这个常量对象,如果没有,那么jvm就会在常量池创建一个存储“abc”的常量对象,然后执行new操作,再在堆中创建一个存储“abc”的string对象,并把引用赋给string1,所以创建了两个对象;如果常量池中有“abc”这个常量对象,那么就不会再在常量池中创建一个存储“abc”的常量对象了,所以就只创建了一个对象;

字符串的并置:

  1. 例:String str="ni”+“hao"
  2. 等价于String str=”nihao“,jvm并不会在常量池中临时创建”ni“和”hao“这两个常量对象,而是会进行常量优化,去常量池查找”你好“这个常量对象,如果没有就会创建一个。注意的是:如果参与并置的String对象中只要有一个是变量,那么java就会在堆中创建一个新的String对象例如:String string1=”hi“; String string2=string1+”hao“;这个就等价于String string2=new String("nihao”);

String类的常用方法:

  1. public int length():获取String对象的长度;
  2. public boolean equals(Object anObject):比较当前String对象的字符序列是否与参数指定的String对象的字符序列相同
  3. public boolean startsWith(String prefix):判断当前String对象的字符序列前缀是否是参数指定的String对象的字符序列
  4.  public boolean endsWith(String suffix):判断当前String对象的字符序列后缀是否是参数指定的String对象的字符序列
  5. public int compareTo(String anotherString):判断当前String对象的字符序列与参数指定的String对象的字符序列的大小关系。
  6. public boolean contains(CharSequence s):判断当前String对象的字符序列是否包含参数s的字符序列,包含则返回true,否则返回false
  7. public int indexOf(String str):返回首次出现str的字符序列的位置(从0开始),如果没有检索到,返回-1;
  8.  public int lastIndexOf(String str):返回最后一次出现str的字符序列的位置(从0开始),如果没有检索到,返回-1;
  9. public String substring(int beginIndex):返回一个新的字符串对象,新的String对象的字符序列是复制当前String对象的字符序列中的beginIndex位置到最后位置上的字符所得到的字符序列,也可以通过调用substring(int start,int end)来规范最后位置
  10.  public String trim():返回一个当前String对象的字符序列去掉前后空格后的字符序列(注意:只是前后空格,中间空格不能去掉)

示例代码:

public class TestString {public static void main(String[] args) {String you="你";String hi="好";String hello1="你"+"好";String hello2="你好";String hello3=you+"好";String hello4=new String("nihao");String hello5=new String("nihao");
//		System.out.println(you+"好"=="你好");System.out.println(hello1==hello2);//==比较的是对象的引用,如果两者引用相同,即是true;System.out.println(hello2==hello3);    System.out.println(hello2.equals(hello3)); //String对象的equals方法比较的是String对象的实体(即比较字符串内容是否相同)System.out.println(hello4==hello5);}
}
//运行结果
true
false
true
false

 

 

 

  相关解决方案