没用的代码就不罗嗦了...
主要的如下 :....
private static final ThreadLocal<T> local=new ThreadLocal<T>();为啥这个 local 要定义为final类型的,难道用 private static 不行吗
我做测试的时候, 用private static 和用 private static final 结果是一样的
那们朋友帮忙看下
最好能给个 private static 和 private static final 区别的例子,先谢了...
主要的如下 :....
private static final ThreadLocal<T> local=new ThreadLocal<T>();为啥这个 local 要定义为final类型的,难道用 private static 不行吗
我做测试的时候, 用private static 和用 private static final 结果是一样的
那们朋友帮忙看下
最好能给个 private static 和 private static final 区别的例子,先谢了...
private static ThreadLocal <T> local=new ThreadLocal <T>(); 则如果后面再有人调用local=new ThreadLocal<T>();
也是合法的,这样可能会破坏ThreadLocal的意义。而如果加上Final,则一旦初始化,就不可能有人再改变local的指向。
package test;//private static 和 private static final 调用的例子
class Test {//extends String 这里 你要继承String 会报错 因为String 类是final 终极(final)类不能被继承 public static void main(String[] args) {
final String strFin = "String_1";
String strFin1="String_1";
System.out.println(new Test().sta());
System.out.println(sta());// 与上面的等价
strFin1= fin();// 把final修饰的静态方法 赋值给了String类型的没有问题
//strFin=fin();// 我把这行代码注释掉了 因为这行语句处错误了 对于final修饰的成员变量 你在想给他赋值 会报错 这里体现了final 是终极变量,不可以改变
System.out.println(strFin1);
//System.out.println(fin1(strFin1));//但是这里没有体现出final的作用 我个人和实践得到的结论是 final修饰的方法没有和别的不同
} private static String sta() {
String str = "static修饰的方法测试";
return str;
} private static final String fin() {
String str = "static修饰的final_1方法";
return str; }
private static final String fin1(String str1 ) {
String str = str1;
return str; }
}
threadlocal作为键值当然不能更改,改了你就再也找不回你放到map中的东东了。
不信你可以试试:
声明一个非final的threadlocal、放进东西去、重新创建这个threadlocal、再从中取,返回null...
其实也并不是说 final更快点,只是不希望值更改