String 类为什么用final修饰

final 修饰符,可以修饰类,方法,变量。修饰类,类不能被继承。修饰方法,方法不能被重写。修饰变量,变量的引用地址不能被修改。

String 类为什么用final修饰_第1张图片

 

String 类底层使用的是char数组。使用final和private 字符修饰char[]

String 使用final修饰符的原因:

1.为了实现字符串池

2.线程安全

3.Hashcode 被缓存,不需要重新计算.这就是map中的键都使用string 作为键

 

字符串池

创建字符串的两种方式:

1.使用字符值创建字符

2.使用new 对象创建字符

 public static void main(String[] args) {
        //创建字符串值的两种方法  1.使用字面值创建字符  2.使用new 对象创建字符
        String str="demo";
        String str2="demo";
        System.out.println(str==str2);  //tru

        String str3=new String("demo2");
        String str4=new String("demo2");
        System.out.println(str3==str4);  //false

    }

这两种创建字符串的方式的区别:

使用字面值创建字符,JVM会先查询字符串池的值,如果存在,直接返回字符串池中字符的引用的地址。如果不存在,在字符串池中,创建字符串,并把引用地址返回给字符串。

使用new 对象创建字符,JVM会先查询字符串池中的对象,如果存在直接在堆中创建这个对象,并返回堆中的地址给字符串,如果在字符串池中不存在,先在字符串池中创建,然后在堆中创建,最后把堆中的引用地址返回给字符串。

字符串值的优缺点:

优点:避免了相同字符串的创建,节省了内存,省去了相同字符串的创建时间。同时提升了性能。

缺点: 牺牲了常量池中遍历对象的时间。

 

缺点:

参考:

https://www.jianshu.com/p/9c7f5daac283

https://blog.csdn.net/qq_39887964/article/details/79525126

 

你可能感兴趣的:(Java)