黑马程序员技术交流社区
标题:
final问题
[打印本页]
作者:
浩临天下
时间:
2013-6-18 19:28
标题:
final问题
public void method(final int i)
{
}
想阻止方法内部修改传进来的参数对象,
可不可以?
作者:
shang1jk
时间:
2013-6-18 20:15
可以.
下面代码可以验证.
class Test
{
public static void main(String[] args)
{
new Test().test1(4);
}
public void test1(final int x)
{
x++; //这句注释掉之后就不报错了
System.out.println(x);
}
}
复制代码
虽然可以, 但是这么做好像没有太大意义..
作者:
changweihua
时间:
2013-6-18 21:04
传的是值的副本,而不是引用
作者:
沐有鱼丸
时间:
2013-6-18 22:13
不可以,Java中全是值调用,方法得到的是所有参数值的一个拷贝,对于基本数据类型和String类,如果有方法类似
method(fina int i)
{
//code.....
},或者
method(final String s)
{
//code...
}就相当于:
method()
{
final int i;
//code...
}和
method(){
final String s
//code...
},
java中final修饰的变量是常量,常量必须在定义时初始化且不可更改,所以
method(final int i )
{
i++; //编译不通过,报错
},final String s 类似,
对于自定义的引用数据类型,区别如下:
public class Person{
String name = "李四";
int age = 20;
public void updat1(Person p) {
p.name="张三"; //没有final修饰,程序正确
p.age = 34;
}
public void updat2(final Person p) {
p.name="张四"; //程序正确,final修饰的变量指 该变量的引用不变,而引用指向的对象的属性内容是可以改变的
p.age = 30;
}
public void updat3(final Person p) {
// p = new Person(); //程序错误,该引用指向了另一个内存空间
}
}
所以final修饰引用数据类型时,只能保证该变量的引用不变,而该引用指向对象的内容是可以改变的。
作者:
孙百鑫
时间:
2013-6-24 23:56
楼主您好,由于帖子长时间没有动态,我已经讲帖子改成已解决了,如有问题,可以私聊我。{:soso_e100:}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2