Java Essay Serials 1 - Java Basics - 14, String类能被继承吗?_Java

应几个法国巴西和印度小程序员的邀请,

我每周在Facebook上发布Java系列小文章,与你们也共享一下。

翻译 | 王楷涵

Java Essay Serials 1 - Java Basics - 14, String类能被继承吗?_Java_02

不能,String类是final的,因此它不能被覆盖。

        这是String类的声明:

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

        在Java语言规范中,String类是不可变的,也就意味着在创建后就不能被改变了。这使得它们可以在整个JVM的范围内共享,换句话说,两个字符串变量将引用同一个字符串实例,从而获得使程序获得更好的性能。

        如果String类不是final的,其子类就会有能力给出不同的实现。例如,字符串可用作类加载的参数,如果其可变,因很容易被修改,则可能导致加载错误的类。这将造成极其恶劣的安全问题。同样的事情也发生在网络编程中,因为套接字的参数通常也是字符串。

        但我们知道,关键字final只能阻止这个类被覆盖,但不能阻止字符串的内容被修改。例如:

final char[] chrs = {'a','b','c'};

        因为数组chrs已经被声明成final,所以其不能被修改成如下这样:

chars=new char[]{'a','b','d'};

        对于这个语句,编译器将提示一个错误:

The final local variable chrs cannot be assigned.

        但我们可以用如下的居于修改数组中的内容:

chrs[2]='d';

        为了保护字符串对象中的内容,Java将数组声明成private final

        在Java8中:

    private final char[] value;

        而在Java11中:

    private final byte[] value;
小贴士

 

返回上一级微信公众号对话框

回复“ m“ 关键词即可获取相关开发工具推荐。

回复“书籍”关键字即可获取相关书籍推荐。

回复“资源”关键字即可获取开发资源大全。

回复“666”关键字即可获取《面试宝典》。

回复“1024”关键字试试?

下方菜单栏点击餐饮部-Java餐-阅读原创书籍。

后续会持续更新更多书籍及优质资源推荐,敬请期待哦!

 

Java Essay Serials 1 - Java Basics - 14, String类能被继承吗?_Java_03点击“阅读原文”,可进入原创书籍阅读目录