JAVA的String类

一、String为不可变对象测试

这里的切割是创建了一个新的对象储存切割的内容

String s1 = new String("abcdef");
String s2 = s1.substring(2, 4);
 
//打印:ab199863
System.out.println(Integer.toHexString(s1.hashCode()));
// 打印:c61, 显然s1和s2不是同一个对象
System.out.println(Integer.toHexString(s2.hashCode()));

二、字符串常量拼接

1、编译器做了优化,直接在编译的时候将字符串进行拼接

String str1="hello" + " java";
String str2 = "hello java";
System.out.println(str1==str2);

2、编译的时候不知道变量中存储的是什么,所以没办法在编译的时候优化

String str1="hello" + " java";
String str5 = str3+str4; 
System.out.println(str5==str1);  //不知道变量里面存储的是什么,为false
System.out.println(str5.equals(str1)); //判断里面内容相同通过equals

三、StringBuffer/StringBuilder基本用法

1、增

  • 增加在字符串末尾
StringBuilder sb = new StringBuilder();
for(int i=0;i<26;i++) {
	char temp = (char)('a'+i);
	sb.append(temp);
}
  • 插入
sb.insert(5,'月');  //插入一个
sb.insert(1, '喔').insert(4,'年').insert(10,'里');  //连续插入多个

2、删

  • 删除单个字符
sb.deleteCharAt(0)//删除某个字符
sb.deleteCharAt(1).deleteCharAt(10).deleteCharAt(15); //删除多个字符
  • 删除子字符串
sb.delete(1, 10); //删除子字符串

3、改

sb.setCharAt(3, '哈');

4、本身逆序

sb.reverse();

5、查

sb.charAt(0)

四、注意

     1. String:不可变字符序列。

      2. StringBuffer:可变字符序列,并且线程安全,但是效率低。

      3. StringBuilder:可变字符序列,线程不安全,但是效率高(一般用它)。

      4.在循环中不去用str8+=i,又创建很多个对象浪费空间还花时间较长

   str8 = str8 +i; 实际上原来字符串对象已经丢弃了,现在又产生了另一个字符串。 如果多次执行这些改变串内容的操作,会导致大量副本字符串对象存留在内存中,降低效率

for (int i = 0; i < 5000; i++) {
    str8 = str8 + i;//相当于产生了10000个对象
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值