简单谈谈Java语言中String类的final作用

什么每个程序员避免不了操作字符串的废话我就不多说了,直接开始正题:Java中String类多处使用final关键字,为什么?

String类的定义如下:

    public final class String implements java.io.Serializable, Comparable<String>, CharSequence {}

    四个地方值得注意:1.final   2.Serializable  3.Comparable  4.CharSequence

         由实现的借口可以看出来,String类似乎和Char有某种关系,没错,代码第一行就是 private final char value[];

    很明显String其实就是(内存中的数据结构)一个char 数组。

 

问题来了。。。。

    是不是感觉有点蹊跷?String类不是不能改变吗【后面讨论为什么不能改变】?那如果底层是char数组,就算是final的,也只能说栈中的引用不可改变,操作value[1] = 200这完全是没有问题的呀。

    写源码的人真的是为你操碎了心,正是怕这样,所以value的权限是final的,并且不能被集成,就怕破坏了这种数据结构和设计。

 

现在讨论一下为什么String s = ”a“;  s+“b“ 不直接改变内存中的数组,而是要直接重起一个堆空间,然后将引用指过去。

    个人认为完全可以不这么设计,假如不这么设计,问题是什么?

        举个栗子:现在有一个数学题 ,int i = 5;  算一下 i+5   那能直接把i的值改成10吗?这从逻辑上来讲,是不符合大部分人逻辑思维的。为了不被更多人骂,就设计成这样了。(个人见解,例子不是很恰当,只是想通俗易懂的讲明白如果不这样设计,副作用在哪里)。

写在最后:String类的final只是方式后人在不了解的情况下,破坏了现有规则。value属性的private final才是实现的根本。

 

如果你觉得这篇内容对你还蛮有帮助,我想邀请你帮我三个小忙:

  1. 点赞,转发,有你们的 『点赞和评论』,才是我创造的动力。

  2. 关注公众号 『逆行的碎石机』,不定期分享原创知识。

  3. 同时可以期待后续文章ing🚀

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值