-
对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常量池的简单理解,如有不对,还请指正。