String不可变

final:首先因为String不可变,如果String不是final,那么就可以有子类继承String类,然后子类覆盖其方法,使得这些方法可以修改字符串,这样就违背了String的不可变性。
不可变原因:1)提高效率:比如一个字符串String s1=“abc”,“abc”被放到常量池里面去了,我再String s2 = “abc”并不会复制字符串“abc”,只会多个引用指向原来那个常量,这样就提高了效率,而这一前提是String不可变,如果尅版,那么多个引用指向同一个字符串常量,我就可以通过一个引用改变字符串,然后其他引用就被影响了
2)安全:String常备用来表示URL,文件路径,如果String可变,或存在安全隐患
3)String不可变,那么他的hashcode就一样,不用每次重新计算。
String不变性的理解
1、String类是被final进行修饰的,不能被继承。
2、再用+号链接字符串的时候会创建新的字符串。
3、String s = new String(“Hello world”);可以创建两个对象也可以创建一个对象。如果静态区中有“Hello world”对象,则堆上和静态区中都需要创建对象。
4、在Java中,通过使用“+”符号来串联字符串的时候,实际上底层会转成通过StringBuilder实例的append()方法来实现。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值