Java中String类型的常量可以修改吗?

本文深入解析Java中的基本数据类型及其对应的包装类,揭示了String类型为何被视为不可变的内在机制,并通过Java1.5后的反射机制展示了String对象值修改的可能性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我们知道,java是面向对象语言,但不是完全的面向对象的,因为它还有包装类型,比如int的包装类型 Integer(这点应该和java历史有关系)像.net这种后来的语言是没有这个说法的。

基本数据类型对象包装类


*为了方便操作基本数据类型值,将其封装成了对象,在对象中定义了属性和行为丰富了该数据的操作
*用于描述该对象的类就称为基本数据类型包装类。
*byte                   Byte
*short            Short
*int                 Integer
*long         Long
*float          Float
*double          Double
*char              Character
*boolean            Boolean
 

查看String类源码:

 

 我们可以看到String使用private final char value[]来实现字符串的存储,也就是说String对象创建之后,就不能再修改此对象中存储的字符串内容,就是因为如此,传统来说的话String类型是不 可变的(immutable)。

 

但在java 1.5之后我们可以通过反射来改变String的值

public class TestStringIsChange {
    public static void main(String[] args) throws NoSuchFieldException, IllegalAccessException {
        String value = new String("hellow");  //这里它提示 new string是多余的
        System.out.println("value1:" + value);
        //从java1.5开始对象属性可以通过反射来修改
        char[] chars = "words".toCharArray();
        //获取string 类中的value字段
        Field valueField = String.class.getDeclaredField("value");
        //设置private字段可以被修改
        valueField.setAccessible(true);
        //把chars设置到value字段的内容
        valueField.set(value, chars);
        System.out.println("value2:" + value);
    }
}

结论:所以说String类型的对象不是完全不能修改的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值