在java中String类为什么要设计成final?
大白话解释就是:String很多实用的特性,比如说“不可变性”,是工程师精心设计的艺术品!艺术品易碎!用final就是拒绝继承,防止世界被熊孩子破坏,维护世界和平!
1. 什么是不可变?不可变很简单,如下图,给一个已有字符串"abcd"第二次赋值成"abcedl",不是在原内存地址上修改数据,而是重新指向一个新对象,新地址
2. String为什么不可变?
2. String为什么不可变?
// 源码
public final class String implements java.io.Serializable, Comparable<String>, 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
}
}