JAVA中的String对象

  • 1. String的特点
  • 2. 创建String对象
  • 3. 字符串连接效率
  • 4. 常用方法
  • 5. 测试常用方法


1. String的特点

字符串对象

是一个封装char[]数组的对象

如何让java的String对象不进入常量池 java string对象_bc


字符串不可变,所谓不可变,不是值不可变,而是需要重新new出一个空间,不可以直接更改之前的数组。

如何让java的String对象不进入常量池 java string对象_字符串_02

2. 创建String对象

如何让java的String对象不进入常量池 java string对象_System_03

1、 如果是第一次使用字符串,java会在字符串常量池创建一个对象。

2、 再次使用相同的内容时,会直接访问常量池中存在的对象。

方式1:new String(char[])

其实字符串底层维护了一个char[]

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

String s = new String(c);//堆中分配新的内存

System.out.println(s);

方式2:直接创建

常量池里直接创建对象(本质还是char[]),再次使用相同内容,会去常量池中找到已经存在的对象,不会新建。

String s2="abcd";//常量池中分配新的内存

System.out.println(s2);

System.out.println(s==s2);//地址不同

System.out.println(s.equals(s2));//内容相同

                           

//如果使用过了就不再创建,引用存在的对象

String s3="abcd";//访问常量池中已经存在的对象

System.out.println(s3==s2);//true

3. 字符串连接效率

利用String类,在做字符串拼接的过程效率极其低下。

String s1="aaa";
String s2="bbb";
String s3="ccc";
String s4=s1+s2+s3;//字符串不可变,每次加会创建新对象,这行代码要产生右侧的5个新对象,慢

 

public class TT {
       public static void main(String[] args) {
              String s = "abcdefghijklmnopqrstuvwxyz";
              String news="";//字符串是不能被修改的,拼接时,每次会创建对象,
             
              long start = System.currentTimeMillis();
              for (int i = 0; i < 100000; i++) {
                     news += s;
              }
              long end = System.currentTimeMillis();
             
              System.out.print(end-start);/输出运行时间,很慢
       }
}

4. 常用方法

length() 长度

charAt(index) 根据index查找char

lastIndexOf(str) 返回指定子字符串在此字符串中最右边出现处的索引,如果此字符串中没有这样的字符,则返回 -1。

substring()截取时含头不含尾[start,end)

equals()字符串内容是否一致

startsWith(str) 是否以指定str前缀开始

endsWith(str) 是否以指定str后缀结束

split(str) 根据指定的规则切割字符串

trim() 去除字符串两端的空格

5. 测试常用方法

import java.util.Arrays;
import java.util.Iterator;
 
//String的常用方法
public class TestString {
    public static void main(String[] args) {
       String s = "abcdefghijk";
      
       System.out.println(s.charAt(3));//d,返回指定索引处的 char 值。
       System.out.println(s.endsWith("jk"));//true,是否以指定后缀结束
      
       String s1 = "abc";
       System.out.println(s.equals(s1));//false,判断两个字符串的内容是否相同
       System.out.println(s.length());//11,字符串的长度
      
       String s2="1,2,3,4,5";
       String[]  strs = s2.split(",");//根据指定的规则切割字符串
       System.out.println(Arrays.toString(strs));//查看数组元素
       System.out.println(s2.startsWith("1,"));//true
       //截取时含头不含尾[3,7)
       System.out.println(s.substring(3,7));//defg
       //把指定的参数转换成String类型
       //把数字10转成字符串10
       System.out.println(String.valueOf(10));
      
    }
}