SGY123

导航

String的final和String常量池

  • 对final的理解

final:最终的

可以修饰变量、方法、类

修饰变量时,如果是基本数据类型,那么它的值一旦初始化之后便不可更改;如果是引用类型变量,初始化之后它就不能再指向其它对象

修饰方法时,此方法不能被重写

修饰类时,此类不能被继承

 

  • 常量池

 

常量池在java用于保存在编译期已确定的,已编译的class文件中的一份数据。

  • 案例一
String s1 = "abc";//先在栈中开辟一个空间存放s1,然后在常量池中寻找是否有"abc"这个对象,有就直接返回引用,没有就在常量池中创建一个再返回引用
String s2 = new String("abc");//先在栈中开辟一个空间存放s2,然后到堆中创建它的对象,再到常量池中寻找,发现已有"abc",直接返回常量池中的引用

堆栈模型:

  • 对String的final的理解

  • 案例二
String s = "abc";
s = s+"d";//s已经不是原对象了

我们知道String是常量,值不可变。而在这里它的值却改变了

这是因为s = s+"d";这里的s已经不是原来的对象了,它一个新的对象。而原字符串的值也并没有被改变(java底层实现的)

以上就是我对于String常量池的简单理解,如有不对,还请指正。

 

posted on 2017-12-19 10:13  SGY123  阅读(930)  评论(0编辑  收藏  举报