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

  • 相关阅读:
    spring
    23种设计模式
    get getline
    ping
    Android四大组件
    C++数据结构
    玩转windows便签
    [JavaScript]再谈 this
    [JavaScript]面向对象编程浅析之XJB讲
    [JavaScript]MVC浅析
  • 原文地址:https://www.cnblogs.com/sgywwy/p/8059838.html
Copyright © 2020-2023  润新知