在java开发中大家都认为final定义的变量时不可以修改的,实际上这只是普遍的想法,并不是绝对的,通过java反射机制就能修改final变量的值,Demo例子如下:
1 package com.ng.pl; 2 3 import java.lang.reflect.Field; 4 5 public class Demo { 6 7 public void change(final String str){ 8 Class<?> v = str.getClass(); 9 try { 10 Field field = v.getDeclaredField("value"); //修改值 11 Field field1 = v.getDeclaredField("count"); //修改长度属性 12 field1.setAccessible(true); 13 field.setAccessible(true); 14 Object object = field.get(str); 15 char [] charValue = {'s','u','c','c','e','s','s'}; 16 /*for (int i = 0; i < charValue.length; i++) { 17 charValue[i] = 'a'; 18 }*/ 19 field1.set(str, charValue.length); 20 field.set(str, charValue); 21 } catch (Exception e) { 22 e.printStackTrace(); 23 } 24 } 25 26 /** 27 * @param args 28 */ 29 public static void main(String[] args) { 30 Demo demo = new Demo(); 31 final String string = "dd"; 32 demo.change(string); 33 System.out.println(string); 34 35 } 36 37 }
发现demo打印出来的结果为success。
总结:通过这个例子我认为发射机制修改值直接修改变量的内存中的值。