在java中String类为什么要设计成final?

在java中String类为什么要设计成final?

大白话解释就是:String很多实用的特性,比如说“不可变性”,是工程师精心设计的艺术品!艺术品易碎!用final就是拒绝继承,防止世界被熊孩子破坏,维护世界和平!

1. 什么是不可变?不可变很简单,如下图,给一个已有字符串"abcd"第二次赋值成"abcedl",不是在原内存地址上修改数据,而是重新指向一个新对象,新地址
在java中String类为什么要设计成final?_第1张图片
image
2. String为什么不可变?
2. String为什么不可变?

// 源码
public final class String implements java.io.Serializable, Comparable, CharSequence {
/** String本质是个char数组. 而且用final关键字修饰.*/
private final char value[];
...
...
}

package test.java.com.wanggs.service;

/**
 * Created by wanggs on 2017/9/13.
 */
public class Test {
    public static void main(String[] args) {
        System.out.println(System.currentTimeMillis());
        String a = "hello2";
        final String b = "hello";
        String c = "hello";

        System.out.println(a==(b+2));
        System.out.println(a==("hello"+2));
        System.out.println(a==(c+2));
        // 用final声明的变量为常量,也就是说System.out.println(a==(b+2));和System.out.println(a==("hello"+2));效果是一样的。
        // a==(c+2) ,c+2 会返回 new String("hello2")而不是在常量池里寻找出来的
        //1505283523129
        //true
       // true
       // false
    }
}

你可能感兴趣的:(在java中String类为什么要设计成final?)