zoukankan      html  css  js  c++  java
  • final修饰的变量是引用不可变,还是对象不可变

    java中final修饰的变量,是引用不可变,还是对象不可变... 这个其实是要分情况讨论的。 总得来说对于一个final变量,如果是基本数据类型的变量,则其数值一旦在初始化之后便不能更改; 如果是引用类型的变量,则在对其初始化之后便不能再让其指向另一个对象。 在这里我要强调一下,不知道有没有小白和我一样,以为string之所以是一个不可变的字符串常量,是因为string是一个被final修饰的类,其实不然,如上所说,String修饰后只是引用不可变而已。至于为什么String是一个不可变的字符串常量,有兴趣的同学可以看一下源码,也可以看一下这里:https://www.zhihu.com/question/20618891. 在这里,我只解释final修饰的引用类型的变量为什么只是引用不可变。
    final int[] value={1,2,3}
    int[] another={4,5,6};
    value=another;    //编译器报错,final不可变
      在这里我们就能看出来,在最后一行,把another指向了value,而value是被final修饰的,所以这里编译器会报错; 在看一串代码:
    1.  final StringBuilder sb = new StringBuilder("haha");
    2.         //同一对象的hashCode值相同
    3.         System.out.println("sb中的内容是:"+sb);
    4.         System.out.println(sb+"的哈希编码是:"+sb.hashCode());
    5.         sb.append("我变了");
    6.         System.out.println("sb中的内容是:"+sb);
    7.         System.out.println(sb+"的哈希编码是:"+sb.hashCode());
    在这里又一个final修饰sb,StringBuilder中的append方法可以改变引用的对象...输出结果为: 代码结果是: sb中的内容是:haha haha的哈希编码是:1928052572 sb中的内容是:haha我变了 haha我变了的哈希编码是:1928052572 由此可以看出hash编码没有变,但是内容改变了
  • 相关阅读:
    漫谈施工企业信息化规划(修订)
    SOAOffice 中间件,北京科翰软件
    组建“建筑施工企业信息化技术交流”QQ群(102226121),欢迎参与!
    国产、免费业务流程梳理工具SAM,炎黄盈动公司产品
    (参考)OpenExpressApp架构-信息系统开发平台
    逍遥笔输入法,哈!
    昨天开了一天的会!!
    昨天回到北京了!
    幸福是什么?
    周末辽宁兴城
  • 原文地址:https://www.cnblogs.com/ZoHy/p/12400679.html
Copyright © 2011-2022 走看看