String不可变类

今天看了一下面试的宝典,其中又涉及到了String不可变类,一阵头大,什么是不可变类,怎么就不可变了呢?下面我简单的介绍一下:

什么是不可变类

不可变类就是创建一个对象,不能改变对象的成员变量,简单的说这个就是不可变量。

区分对象和对象的引用

        String aa = "12";

        aa = "34";

        System.out.println(aa);
        //输出34

不是说不可变吗,怎么还输出34了呢,其中这里“12”是存在内存里的对象,而aa只是一个对象的引用,而后来又把这个引用指向了34这个在内存里的对象,所以输出的是34而不是12,大家都知道Java是面向对象的,不能直接操作做内存,而C++可以操作。引用和对象的关系是下面这样的:

 

String为什么是不可变类呢?

 

String类是final的,其成员变量是private的,而且发现里面是 没有public的setter和getter的。

String类里的方法s.subString()、s.replace()等是可变的?是为什么?

String  aa = "ABCD";

String result = aa.replace("A","a");

//输出result为aBCD,怎么变了呢

可以看一下String类的源码

返回的新的String,那就没问题了。

String真的不能变吗?其实可以通过反射改变String内的属性的值,就不说了,一般不会用到。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值