社区
Java SE
帖子详情
如何保证引用到的对象是final的?
Andy84920
2007-01-17 10:23:48
final StringBuffer sb = new StringBuffer();
final StringBuffer tmp = new StringBuffer();
sb = tmp; //error
sb.append(tmp); //ok
可以看到sb本身是final的,但sb所引用到的对象是可以进行append操作的,是可以改变的。如何保证sb引用到的对象是final的呢?
...全文
306
4
打赏
收藏
如何保证引用到的对象是final的?
final StringBuffer sb = new StringBuffer(); final StringBuffer tmp = new StringBuffer(); sb = tmp; //error sb.append(tmp); //ok 可以看到sb本身是final的,但sb所引用到的对象是可以进行append操作的,是可以改变的。如何保证sb引用到的对象是final的呢?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
4 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
xoele
2007-01-18
打赏
举报
回复
这个也是没有办法的啊 ,因为 Java 里面所有东西都是指针,
要不你自己写个类,只读的,不让别人改,那不就是彻底的final了吗
luyang1016
2007-01-18
打赏
举报
回复
再补充以下:
public static final String str = "abc";
str = "def"; // 出错。
str 就是final的。
先在栈中创建一个对String类的对象引用变量str,然后查找栈中有没有存放"abc",如果没有,则将"abc"存放进栈,并令str指向”abc”,
如果已经有”abc” 则直接令str指向“abc”。
接着又按照刚才的把"def"放进栈,将str指向"def".
但是由于 str 是 final, 指针变了, 所以错了
luyang1016
2007-01-18
打赏
举报
回复
相当于指针不能变,但指针所指的内容可变
===================================
精辟
believefym
2007-01-17
打赏
举报
回复
这个能保证?
final是说sb = tmp是不允许的,不是说引用的对象不可改变,相当于指针不能变,但指针所指的内容可变
java为什么匿名内部类的参数
引用
需要添加
final
?
参考文章: https://www.zhihu.com/question/21395848 java为什么匿名内部类的参数
引用
需要添加
final
? 先看一段代码 这段代码有时可以对外部变量进行赋值,有的又不可以,这是为什么呢? 网上有很多答案,但都没有说明清楚,反而在实验的过程中发现的现象让人越来约迷糊。 public class Index04 { int var1 = 5; A a = new A() { @Override public void met
为什么在匿名内部类中
引用
外部
对象
要加
final
修饰符
问题提的很好,搜了一把终于知道了大概的原因,首先纠正提问者的提问,贴出来的第一段代码属于匿名内部类,第二端代码不属于匿名内部类。回答你的问题,为什么在匿名内部类中
引用
外部
对象
要加
final
修饰符呢,因为,在匿名内部类中
引用
的外部
对象
受到外部线程的作用域的制约有其特定的生命周期,以线程为例,当外部的变量生命周期已经完结之后,内部的线程还在运行,怎么样解决这个外部生命周期已经结束而在内部却需要继续使用
final
和
引用
类型
一、
final
关键字 作用:可以用于修饰类、方法和变量。 规则: 类:被修饰的类,不能被继承。 方法:被修饰的方法,不能被重写。 变量:被修饰的变量,不能被重新赋值 具体: 1、
final
修饰局部变量——基本类型 基本类型的局部变量,被
final
修饰后,只能赋值一次,不能再更改 2、
final
修饰局部变量——
引用
类型
引用
类型的局部变量,被
final
修饰后,只能指向一个
对象
,地址不能再更改。但是不影响
对象
内部的成员变量值的 修改 被
final
修饰的常量名称,一般都有书写规范...
String类为什么是
final
类型?
String类为什么是
final
类型? 首先,先得清楚
final
这个关键字。
final
的出现就是为了为了不想改变,而不想改变的理由有两点:设计(安全)或者效率。
final
修饰的类是不被能继承的,所以
final
修饰的类是不能被篡改的。 了解了这一点,我们再看看问题: 从设计安全上讲 确保它们不会在子类中改变语义。String类是
final
类,这意味着不允许任何人定义String的子类。 换言之, 如果有一个String的
引用
,它
引用
的一定是一个String
对象
,而不可能是其他类的
对象
。 Str
final
修饰的
对象
的初始化方式
final
修饰的
对象
的初始化方式 首先我们先了解
final
关键字的作用 -
final
修饰的类不能有子类,即不能被继承; -
final
修饰的
对象
的
引用
地址不能改变; -
final
修饰的
对象
的方法不能被重写; -
final
修饰的
对象
的变量会变成常亮,值不能被改变
final
修饰的
对象
的初始化方式分两种情况 第一种情况:
final
修饰的成员
对象
有三种初始化方式 1. 在定义变量时赋值 !...
Java SE
62,630
社区成员
307,264
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章