final修饰的变量是引用不可变,还是对象不可变
来源:互联网 发布:mac唇部打底好用吗 编辑:程序博客网 时间:2024/05/16 07:44
如题,
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修饰的,所以这里编译器会报错;
在看一串代码:
- final StringBuilder sb = new StringBuilder("haha");
- //同一对象的hashCode值相同
- System.out.println("sb中的内容是:"+sb);
- System.out.println(sb+"的哈希编码是:"+sb.hashCode());
- sb.append("我变了");
- System.out.println("sb中的内容是:"+sb);
- System.out.println(sb+"的哈希编码是:"+sb.hashCode());
代码结果是:
sb中的内容是:haha
haha的哈希编码是:1928052572
sb中的内容是:haha我变了
haha我变了的哈希编码是:1928052572
由此可以看出hash编码没有变,但是内容改变了...
0 0
- final修饰的变量是引用不可变,还是对象不可变
- Final关键字修饰变量时,是引用变量的值不可变,还是对象的值不可变呢?
- final修饰变量 与 不可变对象
- final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变
- final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变
- 使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变?
- 使用 final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变?
- 使用final 关键字修饰一个变量时,是引用不能变,还是引用的对象不能变?
- 使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变?
- 使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变?
- 使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变?
- 使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变?
- 使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变?
- 使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变?
- 使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变?
- 面试题:使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变?
- 面试题6:使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变
- java中使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变?
- Android开发:最详细的 Toolbar 开发实践总结
- org.aspectj.lang.JoinPoint-中文简要API
- 使用 HTTP/2 提升性能的 7 个建议
- Linux wait函数解析
- java静态类读取配置文件内容
- final修饰的变量是引用不可变,还是对象不可变
- spring工具类AntPathMatcher
- StereoBM:opencv计算视差
- LFS制作
- 数据库的唯一索引
- Android图片压缩(质量压缩和尺寸压缩)&Bitmap转成字符串上传
- 关于Socket通讯时通讯协议的制定
- shell中的判断与循环
- Servlet