final关键字:类、方法、变量
修饰类:不能被继承,详情看String类修饰方法:1、锁定方法不被继承类修改;2、效率
修饰变量:基本数据类型变量不可修改、引用类型变量不能指向其他对象
以下是常犯错误:
package concurrency.example.immutable;
import com.google.common.collect.Maps;
import concurrency.annotations.NotThreadSafe;
import lombok.extern.slf4j.Slf4j;
import java.util.Map;
/*
*Created by William on 2018/4/29 0029
* final修饰变量
*/
@Slf4j
@NotThreadSafe
public class ImmutableExample1 {
private final static Integer a = 1;
private final static String b = "2";
private final static Map<Integer, Integer> map = Maps.newHashMap();
static {
map.put(1, 2);
map.put(3, 4);
map.put(5, 6);
}
public static void main(String[] args) {
// a=2; 编译报错
// b="3";编译报错
// map = Maps.newHashMap();编译报错
map.put(1, 3);
log.info("map:{}", map.get(1));
}
}
final修饰map之后,数值还是可以修改的,只是不能指向其他对象。