final类 引用变量不能变 String也是final的 为啥string的引用变量能变

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了final类 引用变量不能变 String也是final的 为啥string的引用变量能变相关的知识,希望对你有一定的参考价值。

final类的 引用变量不能变
为什么string的引用变量能变

这个问题有点底层,大概的意思是,fianl修饰的变量无法改变值,但是其实String的底层对应这一个常量池,所以你每对String进行一次赋值,JVM其实都是在常量池里面重新建立了一个字符串常量,你看上去好像是改变了值,但其实不是,有兴趣的话可以去找点资料了解一下。 参考技术A string内部的value数组是final的

final关键字!

一、关于final关键字

  final关键字可以用来修饰类、方法和变量(包括成员变量和局部变量),并且不能被继承、不能被重写、不能二次赋值。

二、当final关键字修饰一个变量时,是引用变量不能变,还是引用的对象不能变?

  当final关键字修饰一个变量时,是引用的变量不能变,引用变量所指的对象中的内容还是可以改变的。

  例如:

final String a = new String("内容");

  执行如下的语句将报告编译错误:

a = new String("");

  如果改变里面的内容则是可以通过编译的:

a.append("新的内容");

三、final和static的区别

用final修饰,主要是为了“不可修改”,从而提高安全性 。而static重点在于共享,方便。在类里创建一个static修饰的函数,则可以直接通过类名访问,该类new出来的对象,也可以共享static函数,或者static修饰的共有属性。

  

以上是关于final类 引用变量不能变 String也是final的 为啥string的引用变量能变的主要内容,如果未能解决你的问题,请参考以下文章

final修饰的变量引用不能变还是对象不可变

final关键字!

final关键字

Java中final有啥用

Java基础之final关键字

高级特性题