Skip to content

String用final修饰的真正原因 #2462

Open
@kiritozc

Description

@kiritozc

JavaGuide中提到String用final修饰是为了避免被继承后修改String的值,导致破坏String的不可变性。

实际上只需要使用private修饰byte[]数组即可保证String的不可变性,String使用final修饰的真正原因是加速String方法的调用过程
在Java中存在着虚函数表,虚函数表的主要作用是帮助多态加速。具体来说,在编译时每个类都会生成一张虚函数表,记录着所有方法的指针。在运行时,通过实例对象的真正类型,找到虚函数表,再获得需要调用的方法的指针。这是一个动态的过程(因为需要在运行时确定方法的指针)。
而如果一个类被final修饰,那么我们在编译时即可确定对象的运行时类型(因为没有子类,自然也不用考虑多态),因此可以在编译时就确定方法指针,无需动态获取,提高了运行速度。

Metadata

Metadata

Assignees

No one assigned

    Labels

    discussdiscuss a problem

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions