社区
Java SE
帖子详情
函数传参中的 final
supergerm
2005-04-03 01:08:18
假设:
KK 是一个对象的引用,a、b 都是 KK 的数据成员,将KK以参数形式传递给一个函数。
问题:
如何做,才能防止 a、b 在函数中被修改?
...全文
285
15
打赏
收藏
函数传参中的 final
假设: KK 是一个对象的引用,a、b 都是 KK 的数据成员,将KK以参数形式传递给一个函数。 问题: 如何做,才能防止 a、b 在函数中被修改?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
15 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
supergerm
2005-04-04
打赏
举报
回复
哦。好吧。谢谢大家。结帖了。
kingfish
2005-04-03
打赏
举报
回复
那做不到
java并没有像其它语言提供readonly的支持。
supergerm
2005-04-03
打赏
举报
回复
不。。您也没理解我的意思。。。。我的意思是,在公有的情况下,就是不想让他被改。。。因为某些时候,有必要用的。
kingfish
2005-04-03
打赏
举报
回复
by value
即使不用final也改不了x(x的a和b可以改)
class KK{
private int a;
private int b;
public KK(int a,int b){
this.a = a;
this.b = b;
}
}
void f(KK x){
x.setA(1);
x.setB(2); //如果不提供set方法,就不能改了
}
supergerm
2005-04-03
打赏
举报
回复
还有没有人可以解释下了?
supergerm
2005-04-03
打赏
举报
回复
??没看懂
escalj
2005-04-03
打赏
举报
回复
?!
vgvg
2005-04-03
打赏
举报
回复
class KK{
final int a=0;
final int b=0;
}
class Test{
public static void main(String[] arg){
KK k0=new KK();
method(k0);
}
static void method(KK k){
//k.a=1;
//k.b=2;
}
}
-----------------
class KK{
private int a;
private int b;
}
class Test{
public static void main(String[] arg){
KK k0=new KK();
method(k0);
}
static void method(KK k){
//k.a=1;
//k.b=2;
}
}
supergerm
2005-04-03
打赏
举报
回复
是的,正因为 (final KK x) 这是使 KK 这个引用看成了“常量”,而不是内部的对象。我现在就是想问如何能使这个对象成为“常量”呢?
还是没有这种方法??
Ji秋风
2005-04-03
打赏
举报
回复
void fun(final KK x)
~~~~~~~~~~~~~~~~~~这里的final只说明x不能赋予新的KK对象。
如果a,b是public,人家还是可以修改的。
好的方法是,你要使用private或protected保护起来。
supergerm
2005-04-03
打赏
举报
回复
To: midthinker(思索者)
你误解我的意思了。。我是要把 对象传到函数里面去, a、b 只是举个例子罢了。对于 传进的那个对象,我是不想让函数修改他所有的成员。
supergerm
2005-04-03
打赏
举报
回复
NO! 你们误解了。。。我知道在参数中用 final 但不知道用在哪个位置,请给个例子可以吗?
midthinker
2005-04-03
打赏
举报
回复
final能够相当不错的解决问题,但是如果可以得到a,b中真正关心的简单数据类型的话,还是建议利用简单数据类型作为参数传递。
@.@||~
F1in2003
2005-04-03
打赏
举报
回复
自问自答?
jFresH_MaN
2005-04-03
打赏
举报
回复
你的标题已经给出了答案啊
关于
final
字段修饰静态变量的一些思考
为什么
final
修饰的string类型的静态变量在进行方法传递时会直接传值呢?
android dialog
传参
数,Android:将参数传递给Alert Dialog
如果您将变量声明为
final
,那么您可以在调用AlertDialog.Builder()之前在代码
中
设置它,然后在onClick()
中
访问它,如下所示:
final
int someParameter = someValue;AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this);alertDialogBuilde...
详解java new_详解 JAVA 创建对象 NEW
引用对象之间的赋值、判相等通过上述的图解,大伙儿应该明白指针变量和该指针变量指向的对象是一个什么关系了吧。还是接着刚才的例子,再来看赋值的问题。对于如下语句:StringBuffer str2 = str;这个赋值语句是啥意思捏?实际上就是把str的地址复制给str2,记住,是地址的复制,StringBuffer对象本身并没有复制。所以两个指针指向的是同一个东东。再搞一张示意图,如下(...
Java 新手进阶:细说引用类型
在前几天的帖子《Java性能优化[1]:基本类型 vs 引用类型》里,俺大概介绍了“引用类型”与“基本类型”在存储上的区别。昨天有网友在评论
中
批评说“引用类型变量和它所引用的对象”没区分清楚,容易混淆。所以今天专门来说一下引用类型的相关细节。 另外,顺便也把原先的帖子
中
,关于“两种类型的存储方式”这节补充了一下,加点插图,有助于大伙儿的理解。 其实,引用类型的变量非常类似于 C/C++ 的...
c++改Java代码的体悟
对于匿名对象的使用 c++的匿名对象创建非常简单,只需要类名+参数就可以,但Java则需要严格按照new的方式,去new一个匿名对象创建。 set(Data(1,1,1))//c++ set(new Data(1,1,1))//java
final
和const关键字
final
和const在修饰变量时用法基本相同,都表示不可修改的。但是两者在修饰方法时却有很大差别。c++
中
const修饰一个方法...
Java SE
62,622
社区成员
307,255
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章