Java String不可变

Java String 为啥是不可变的

最近面试问到String对象为啥不可变?因此打算看看源码一看究竟。
1、先看看源码

public final class String
    implements java.io.Serializable, Comparable<String>, CharSequence {
    /** The value is used for character storage. */
    private final char value[];

    /** Cache the hash code for the string */
    private int hash; // Default to 0

    /** use serialVersionUID from JDK 1.0.2 for interoperability */
    private static final long serialVersionUID = -6849794470754667710L;

2、先看看大家怎么说
说法一:String类是final修饰。
说法二:value是final修饰。
3、本猿拿证据
1、final修饰的类无子类,不可以被继承,更不可能被重写,可没有说创建的对象不能被修改。所以我认为这不是根因。
2、用final修饰的成员变量表示常量,值一旦给定就无法改变! 这是啥意思呢?意思是说value这个变量不可以被重新赋值。但是数组是引用类型,value指向的那块内存没有限制不能被修改,为此本猿做了个测试。

final char[] value = new char[3];
		for (int i = 0; i<value.length ;i++){
			value[i] =(char)(56+i);
			System.out.println(value[i]);
		}
		System.out.println("------再次赋值---------");
		for (int i = 0; i<value.length ;i++){
			value[i] =(char)(64+i);
			System.out.println(value[i]);
		}

结果
在这里插入图片描述
从这个结果本猿再次看源码没有找到,在string里面没有找到修改value指向的那块内存值的方法。
4、本猿结论
String创建的对象不能被修改的原因是,String是个final类,没办法通过继承重写它的方法,它又没有提供修改value指向的内存的值。所以创建之后就没办法修改了。
5、本猿猜想
如果可以得到String对象 value指向的内存是不是就可以让它可变了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值