Java反射-修改String常量
2017-12-15 20:33
465 查看
/* * ReflectString.java * Version 1.0.0 * Created on 2017年12月15日 * Copyright ReYo.Cn */ package reyo.sdk.utils.test.reflect; import java.lang.reflect.Field; public class ReflectString { public static void main(String[] args) { String s1 = "reyo"; String s2 = "reyo"; String s3 = new String("reyo"); String s4 = new String(s1); System.out.println("s1==s2:" + (s1 == s2)); System.out.println("s1==s3:" + (s1 == s3)); System.out.println("s3==s4:" + (s3 == s4)); try { Field f = String.class.getDeclaredField("value"); System.out.print("Accessible: " + f.isAccessible()); f.setAccessible(true); System.out.println(" -> " + f.isAccessible()); char[] v = (char[]) f.get(s1);// 获取S1的内部value数组 System.out.print("\nvalue:"); System.out.println(v); v[0] = 'x';// 修改数组 v = new char[1];// 目测因为是get到的是引用的复制,这个引用改变不影响原引用 v[0] = 'y'; System.out.print("value:"); System.out.println(v); } catch (Exception e) { System.out.println(e.getMessage()); } System.out.println("\ns1:" + s1 + "\ns2:" + s2 + "\ns3:" + s3 + "\ns4:" + s4); System.out.println("\ns1==s2:" + (s1 == s2)); System.out.println("s1==s3:" + (s1 == s3)); System.out.println("s3==s4:" + (s3 == s4)); } }
s1==s2:true
s1==s3:false
s3==s4:false
Accessible: false -> true
value:reyo
value:y
s1:xeyo
s2:xeyo
s3:xeyo
s4:xeyo
s1==s2:true
s1==s3:false
s3==s4:false
相关文章推荐
- Java反射-修改String常量
- java反射-修改String常量
- JAVA反射修改常量,以及其局限(修改private final限制)
- JAVA反射修改常量,以及其局限
- Java反射学习-使用反射修改一个类中的所有String类型的成员变量的值
- JAVA反射修改常量,以及其局限
- Java中,利用反射机制修改定义出来的String对象本身。
- Java中String不可变性以及通过反射进行修改
- Java中String为什么被设计成immutable(不可修改的)/final
- Java反射之Method Class.getMethod(String name, Class<?>... parameterTypes)
- Java常量字符串String理解
- Java常量字符串String理解
- java 通过反射reflect修改父类私有对象的值
- java 张孝祥(12) 通过反射将String写入Integer的数组中。
- java反射学习笔记一(解析java.lang.String)
- Java 反射实例化对象(修改工厂模式)
- Java 面试题之反射的应用(如何在List<String> list = new ArrayList<String>();中放入Integer类型的数据)
- Java通过反射机制修改只读属性参数
- Java反射如何有效的修改final属性值详解
- Java反射高级应用--利用反射调用类的私有方法修改私有方法值,以及替换Java的类成员数据