String类

一、字符串的存储

字符串是常量,创建之后不可改变。

字符串字面值存储在字符串池中,可以共享。

String s = “Hello”; 产生一个对象,字符串池中存储。

public static void main(String[] args) {
    String str1 = "Hello"; //将 "Hello" 常量存储在字符串池中
    System.out.println(str1.hashCode());
    //把"张三"赋值给str,但并没有修改"Hello"这块数据,而是重新开辟空间
    str1 = "张三";
    System.out.println(str1.hashCode());
    String str2 = "张三";
    System.out.println(str2.hashCode());
    //字符串的另一种创建方式 - 会创建两个对象,一个在堆中一个在常量池中,可能造成空间的浪费
    String str3 = new String("李四");
}

在我这里的输出结果为:

69609650
774889
774889

可以看到,在修改了str1的字符串之后,地址发生了改变,而新创建的str2内容与地址都和str1相同

证明了"Hello" 和 “张三” 都是在常量池中,创建后将不会改变,并且str1与str2共享了 “张三” 这个字符串,所以地址是相同的

而 “Hello” 这一字符串在没有使用到之后,可能会在某个阶段被认为“垃圾”而被处理掉

String常量池

思考:以下代码输出的是true or false?为什么?(根据上面的图进行思考,具体答案请自行验证)

String str1 = new String("test");
String str2 = new String("test");
System.out.println(str1 == str2);

二、常用方法

方法作用
public int length()返回字符串的长度
public char charAt(int index)根据下标获取字符
public boolean contains(String str)判断当前字符串中是否包含str
public char[] toCharArray()将字符串转换成数组
public int indexOf(String str)查找str首次出现的下标,存在,则返回该下标;不存在,则返回-1
public int lastIndexOf(String str)查找字符串在当前字符串中最后一次出现的下标索引
public String trim()去掉字符串前后的空格
public String toUpperCase()将小写转成大写
public String toUpperCase()将大写转成小写
public boolean startWith(String str)判断字符串是否以str开头
public boolean endWith(String str)判断字符串是否以str结尾
public String replace(char oldChar, char newChar)将旧字符串替换成新字符串
public String[] split(String str)根据str做拆分

可变字符串

StringBuffer:可边长字符串,JDK1.0提供,运行效率慢、线程安全。

StringBuilder:可边长字符串,JDK5.0提供,运行效率快、线程不安全。

public static void main(String[] args) {
    StringBuffer sb = new StringBuffer();
    //1.append(); 追加
    sb.append("test1 ");
    System.out.println(sb.toString());
    sb.append("test2 ");
    System.out.println(sb.toString());
    //2.insert(); 添加 - 可选位置
    sb.insert(0, "test3 ");
    System.out.println(sb.toString());
    //3.replace(); 替换
    sb.replace(0, 5, "test4");
    System.out.println(sb.toString());
    //4.delete(); 删除
    sb.delete(0, 6);
    System.out.println(sb.toString());
    //5.清空
    sb.delete(0, sb.length());
}

知识点总结自bilibili(Java学习营)视频链接

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值