Java String类型值真的不可改变吗?

Posted OkidoGreen

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java String类型值真的不可改变吗?相关的知识,希望对你有一定的参考价值。

1.Java String 可以改变吗?

一直认为java 中String类型的值不能修改,主要是因为String是final的,而且里面没有设置值的set方法。但是可以通过反射机制改变值。

例1

public class Test 
    public static void main(String[] args) throws Exception 
        String s="0123456789";
        System.out.println("改变前:s=" + s);
        Field f = s.getClass().getDeclaredField("value");
        f.setAccessible(true);
        f.set(s, new char[]'a', 'b', 'c');
        System.out.println("改变后:s=" + s);
    

例1 结果:

改变前:s=0123456789
改变后:s=abc

例1 原因

    String 类里有个 private final char value[]成员变量, String 类的值都是保存在这个value属性中。可以通过反射来改变这个值,达到改变String类值的目的。同理,通过这种方式

以上是关于Java String类型值真的不可改变吗?的主要内容,如果未能解决你的问题,请参考以下文章

在Java中String类为什么要设计成final?String真的不可变吗?其他基本类型的包装类也是不可变的吗?

String不可变性

JAVA中天天使用的String,鲜为人知的众多细节梳理

Java 初学者(15)

java基础 String性质深入解析

java String分配内存空间备忘