我也找了一些资料,String对象创建出来之后就无法修改了?

解决方案 »

  1.   

    你要修改a对象,还是常量池里面的“abcd”啊?
    这俩都能改,你要改a对象就从新new一个
    你要修改常量池里的“abcd”就写个外挂,找到abcd的内存地址,修改掉!
      

  2.   

    String类是final,在java的定义中是不可变对象。
      

  3.   

    不能修改是因为String类没有提供修改内部char[] value;的方法,而且你不能通过继承去扩展它的特征。
      

  4.   

    用反射可以
      public static void main(String[] args) throws Exception {
        final String str = "abcd";
        System.out.println(str);
        edit(str, "efgh");
        System.out.println(str);
      }  public static void edit(final String str, String newValue) throws Exception {
        Field field = String.class.getDeclaredField("value");
        field.setAccessible(true);
        field.set(str, newValue.toCharArray());
      }
      

  5.   

    这个你别想了,java里String的设计就是不能修改的,如果你想出修改的办法了,那你就厉害了,可以到oracle公司寻求一个Java大神职位。
    而且为了防止修改String类的行为,把String设置成不能被继承的。
      

  6.   

    @see java.lang.reflect.AccessibleObject.setAccessible(boolean)
      

  7.   

    @see java.lang.reflect.AccessibleObject.setAccessible(boolean)
    也行吧,我刚才说的太绝对了,收回。但反射不算是正常方法。楼主主要是不知道String是被设计成不能改的。
      

  8.   

    JDK7 以前不行吧, 测不了了, 好像是有个长度限制什么的
      

  9.   

    JDK7 以前不行吧, 测不了了, 好像是有个长度限制什么的
    java 8 测试通过。
      

  10.   


    明白了,感谢大家。
    我的类中有一个String,修改的时候,直接就让他=另一个引用了,我就怕如果能修改,在我的程序中把其中一个对象的修改了,到时候另一个对象也发生变化。