String与final


tags: Java基础


String与final之间的关系

我们在学习java的时候可能会经常提到一个知识点:String是一个不可变类。

对于不可变类,我们又想到了final这个关键字了。

有的书也会说,String是final类。

而在实际中,我们对于final关键字和String不可变类的理解可能会有些偏差...

String是不可变类

怎么理解String是一个不可变类这么一句话呢??

我们常常使用字符串是这样子的,看如下的代码:



String s = "aaa";
s="bbb";

复制代码

这样的代码**是没有错误的。**那你又说String是不可变类,这是怎么回事呢???

String不可变类的意思是:我们的"aaa"字符串是不会被修改的,并不是String 的变量s不会改。

String的变量s只是改向了对字符串的引用,并没有修改我们的字符串值。

那对于String的不可变有什么好处??

  • 好处就是我们可以共享字符串
    • 当别的其他需要"aaa"这么一个字符串值的时候,编译器会去找我们的常量池(装载我们字符串的地方),看有没有"aaa",如果有的话,那么系统就不用再次创建了,直接用就行了。

理解final

上面理解了String不可变类的意思了,那final不是修饰在String类上面吗??final的意思不就是不能修改引用的值吗??

如果final修饰在类上的话,那么表明的是:它不能有子类

如果final修饰在变量上的话,那么它就是表明不能修改变量的引用!

明确了这点以后,我们就能理解final与String之间的关系了

  • final修饰的是String类【说明String类不能被继承了】
  • final如果修饰了String类型的变量,那么这个变量连set方法我们都可以不用给了
    • 因为String本来就是一个不可变类【String字符串值不能被修改】
    • 并且修饰成final的话,String 变量的引用也不能修改了。
    • 因此,它就是一个常量。

还有值得说明的是:final仅仅是不能修改该变量的引用,但是引用里边的数据是可以改的!


	private final User  = new User("aaa","bbb");
	user.setName("ccc");

复制代码

上面的操作是没问题的。我们的引用是没有变,变的只是引用内部所对应的值而已。

如果您觉得这篇文章帮助到了您,可以给作者一点鼓励

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值