String,你知道多少?

本文深入探讨了Java中String数据类型的内部实现,包括其基于char数组的存储方式,四种构造方法,以及equals和compareTo方法的区别。同时,对比了String、StringBuilder和StringBuffer的使用场景和性能差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

String是我们日常开发用到最多的数据类型之一,我记得一次面试的时候,面试官问我,String是基本数据类型吗?我回答,是,他问,确定?我说,确定!现在想起来真是笑死了,确实是自己知识不严谨,然后面试官也太故意了吧。。。
这里是花了一块钱的教程链接,本文也是博主学习后的总结

  • String内部实际是采用char数组的方式存数据的
  • String有4个构造方法:
    1、以String为参数。
    2、以char数组为参数。
    3、以StringBuilder为参数。
    4、以StringBuffer为参数。
  • 比较两个String的方法(自行观察源码更容易理解):
  • equals方法:
    核心是对两个String的每个字符作比较
  • compareTo方法:
    底层是一个字符一个字符的比较(这里是将字符转换成char类型),如果出现字符不一致的情况则返回char1 - char2。
  • equals方法和comparaTo方法都可以用来比较字符串,区别是前者返回布尔值,后者返回数字,0则为一致,其他都是不一致。
  • 其他方法:
    indexOf方法,lastIndexOf方法,contains方法,split方法,join方法

问题:

  • String在JVM中是如何存放的?
  • String类为何用final修饰?
  • StringBuilder和StringBuffer还有String三者的区别。

思考:

  • String在内存中分为对象和常量池两种方法存储的,new String()的方式是在堆中存储,String str = "string"则是存在常量池中的。
  • String类被final修饰,代表它是不可以被修改的,我们每次的字符串拼接都会生成一个新的字符串,所以循环拼接的时候要使用StringBuilder或者StringBuffer,而这两者的区别则是StringBuffer是线程安全的,另一个不是。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值