String知识点

字符串的比较操作

  1. 使用“==”运算符 :只能比较引用的内存地址是否相同。
  2. 使用equals()方法 : 在Object类中和“==”运算符相同。但是建议子类覆盖equals()方法去比较自己的内容。
    String类覆盖了equals()方法,比较的是字符内容。
    使用equals()方法注意事项:
    错误用法: str.equals("abc");
    正确用法: "abc".equals(str);

String内存分析

下列两行代码分别创建了几个String对象?

String str1 = "ABCD";
String str2 = new String("ABCD");

String str1 = "ABCD";: 最多创建一个String对象,最少不创建String对象。如果常量池中已经存在“ABCD”,那么str1直接引用,此时不创建String对象。否则,先在常量池中创建“ABCD”的内存空间,再引用。
String str2 = new String("ABCD");:最多创建两个String对象,最少创建一个String对象。new关键字绝对会在堆空间创建内存区域,所以至少创建一个String对象。
在这里插入图片描述


String类中的常用方法

  • 把 char数组 或 byte数组 转换为String。
   String str = new String(byte[] bytes) ;
   String str = new String(char[] value)  ;
  • 获取字符串信息
   str.lenth();//返回字符串的长度。 return: int 
   str.charAt(int index);//返回指定索引处的char值。  return:  char
   str.indexOf(String str);//返回指定子字符串第一次出现的字符串内的索引。 return: int
   str.lastIndexOf(String str);//返回指定子字符串最后一次出现的字符串中的索引。return: int 
   str.toLowerCase();//将所有在此字符小写。return:  String
   str.toUpperCase();//将所有在此字符大写。return:  String
   str.trim();//删除首位空格。 return:  String
   str.equalsIgnoreCase(String anotherString);//比较字符串,忽略大小写。return:  boolean
   str.isEmpty();//判断字符串是否为空。  return:  boolean

分别使用String/StringBuilder/StringBuffer来拼接30000次字符串,对比各自损耗时间。

经过测试:
   String做字符串拼接的时候性能极低(耗时),原因是String是不可变的,每次内容改变都会在内存中创建新的对象。
   String耗时:1946ms
   StringBuffer耗时:3ms
   StringBuilder耗时:1ms
   结论:拼接字符串,统统使用StringBuilder/StringBuffer,不要使用String。

String和StringBuilder以及StringBuffer的区别

StringBuilder和StringBuffer都表示可变的字符串,功能方法都是相同的
StringBuffer中的方法都使用了synchronized修饰符,是线程安全的,但是性能会相比StringBuilder较低。
StringBuilder中的方法没有使用synchronized修饰符,线程不安全,但性能会相比StringBuffer较高。
建议使用StringBuilder


StringBuilder的常用操作

  • 构造方法
      使用StringBuilder无参数构造器,在底层创建了一个长度为16的char数组。
      StringBuilder sb = new StringBuilder(); //等价于 new StringBuilder(16);
      指定长度超过16个字节时,底层会进行 自动扩容(创建长度更大的数组,再把之前的数组拷贝到新数组)。自动扩容的方式:原长度 * 2+2 。扩容性能极低,
      一般的,我们如果大概知道需要存储多少字符,在构造器中就应该设置明确的长度。
  • append(Object obj);
StringBuilder sb = new StringBuilder();
sb.append("a").append(666);
System.out.println(sb);
-------------------------
a666
  • capacity(); //返回当前容量。
  • delete(int start, int end); //删除指定索引区间的全部字符。
  • deleteCharAt(int index); //删除指定位置的字符。
  • reverse() ;//将该字符串反转(“abc”—>“cba”)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值