深度剖析String类

问题一:String能被继承吗?为什么?
答:不能
解析:
String类的方法头是:public final class String extends Object,其中修饰关键字final是String不能够继承的关键。

【那final有哪些性质和功能呢】

  1. final可以修饰:类、变量和方法
  2. final修饰类的时候 ,这个类就不能被继承了,类中所有的方法也就被隐式的变为final方法
  3. final修饰的方法的类可以被继承,但是final修饰的方法无法被覆写
  4. final修饰的变量相当于常量,所以只能被赋值一次,赋值后,值不再更改 ,故final修饰的变量必须被初始化,初始化可以在声明变量的时候,也可以在构造函数中初始化

问题二:String str = “abc” 和 String str = new String(“abc”); 两者是否相同呢?
答:不相同
解析:
String str = “abc” 调用的是String.valueOf来返回String实例对象。(调用函数取决于所赋值的类型)

String num = 123 调用的函数为:

public static String valueOf(int number){
	return Integer.toString(number);
}

String str = new String(“abc”); 调用的是:

public String(String original) {
	this.value = original.value;
	this.hash = original.hash;
}

问题三:String, Stringbuffer, StringBuilder 的性质以及区别是什么?

String

  1. String类是java.lang包中的immutable类
  2. String类是字符串常量,一旦创建就不能修改
  3. 假若String对象已经存在,需要重新创建一个新的对象将值保存进去
  4. string覆盖了equals方法和hashCode()方法
    【注:String里面所有的属性几乎也是final类,因此它的不可变性,类似拼接,裁剪字符串等动作(拼接次数过多建议使用StringBuffer,或者StringBuild)都会产生大量无用的中间对象,对项目的性能有明显的影响】

Stringbuffer(字符串可变对象)

  1. StringBuffer继承自AbstractStringBuilder类
  2. 为解决String拼接产生多余对象的问题而提供的一个类【区别String:修改字符串原有值时不用新建一个对象】
  3. 执行效率较慢,但是线程安全
  4. 可以动态的构造字符数据,append()方法
  5. StringBuffer没有覆盖equals方法和hashCode()方法
    【注:Stringbuffer用于拼接,替换,删除。在项目多线程环境下运行,如:XML解析,HTTP参数解析与封装等】

StringBuilder(字符串可变对象)

  1. StringBuilder继承自AbstractStringBuilder类
  2. 同StringBuffer一样,可以对字符串进行操作,也不会新建对象
  3. 执行效率高效,但是线程不安全
    【注:StringBuilder同StringBuffer使用方式相似,但在项目中使用的地方最好是单线程的环境下,如:SQL拼接,JSON封装等】

应用

  1. 初始化
    String:String str = new String(“abc”);
    StringBuffer:StringBuffer sb = new StringBuffer(“abc”);
  2. 字符串修改(StringBuffer)
str = "abc";
StringBuffer sb = new StringBuffer(str);
sb.append("def");
str = sb.toString();

输出的结果为:abcdef

本文后续更新,欢迎相互交流。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小鹏AI

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值