凡科网站建设7个基本流程,企业商务网站建设策划书,WordPress前台用户发布,archdaily1 问题 如何理解“String是不可变的#xff0c;但是可以变”#xff1f; 2 方法 #xff08;1#xff09;String的不可变特性体现在内容和长度 首先在idea中点开查看String这个类是如何定义的 可以看到这样一行代码#xff1a;private final char value[]; 正是因为这个数… 1 问题 如何理解“String是不可变的但是可以变” 2 方法 1String的不可变特性体现在内容和长度 首先在idea中点开查看String这个类是如何定义的 可以看到这样一行代码private final char value[]; 正是因为这个数组属性形成了String的不可变特性 内容不可变是因为用private修饰的属性只能在String类的内部才能被访问 长度不可变是因为用final修饰的char[]由于数组创建时必须指定长度一旦确定不能改变。且又有final修饰所以数组的地址引用也不可以变。 2String可变是可以通过反射的机制去操作String对象中value属性的值 import java.lang.reflect.Field;public class Test01 { public static void main(String[] args) throws NoSuchFieldException, IllegalAccessException { String s abc; System.out.println(s); //反射String类 Class clazz String.class; //找到私有属性 Field field clazz.getDeclaredField(value); field.setAccessible(true); //获取私有属性的值 char[] value (char[]) field.get(s); value[0]1; value[1]2; value[2]3; System.out.println(s); }} 运行代码后打印第二次s的时候输出的就是已经修改过后的123 3 结语 针对“String是不可变的但是可以变”的问题提出了实验的方法通过反射机制编写相应的代码实验证明方法是有效的未来可以继续研究更多Java中关于反射机制的问题。