日期:2014-05-20 浏览次数:20863 次
/** * 重新设置String的值,不是将obj指向新的地址,而是直接修改obj.value的指向<br/> * <strong>警告</strong>:obj必须这样申明: String obj = new String();<br/> * 如果这样申明 String obj= "123"; * changeValue(obj,"abc"),将可能导致虚拟机中所有值为"123"的String变成"abc" * * @param obj * @param newValue * 新的值。 * @return obj */ public static String changeValue(String obj,String newValue) { char[] _value = newValue.toCharArray(); char[] charArray =Arrays.copyOf(_value, _value.length); Field field=null; try { field = String.class.getDeclaredField("value"); field.setAccessible(true); field.set(obj, charArray); field = String.class.getDeclaredField("offset"); field.setAccessible(true); field.set(obj, 0); field = String.class.getDeclaredField("count"); field.setAccessible(true); field.set(obj, charArray.length); field = String.class.getDeclaredField("hash"); field.setAccessible(true); field.set(obj, 0); }catch ( Exception e) { e.printStackTrace(); } return obj; }
public interface LegendConstants { public static final String LEGEND_HOME = "legend.home"; public static final String LEGEND_I18N_ENCODING = "legend.i18n.encoding"; public static final String LEGEND_RESOURCE_ROOT = "legend.resource.root"; public static final String LEGEND_RESOURCE_PROVIDER_CLASSNAME = "legend.resource.provider.classname"; public static final String LEGEND_TEMPLATE_DIR = "legend.template.dir"; public static final String LEGEND_DEVMODE="legend.devMode"; public static final String LEGEND_THEME = "legend.theme"; public static final String LEGEND_ADMINISTRATOR = "legend.administrator"; }
------解决方案--------------------
赞一个,LZ想法确实不错,挑战String“不可变字符序列”