A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 浩临天下 中级黑马   /  2013-6-18 19:28  /  1311 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文




public void method(final  int  i)
{

}

想阻止方法内部修改传进来的参数对象,
可不可以?

4 个回复

倒序浏览
可以.
下面代码可以验证.
  1. class Test
  2. {
  3.         public static void main(String[] args)
  4.         {         
  5.                 new Test().test1(4);
  6.         }
  7.         
  8.         public void test1(final int x)
  9.         {
  10.                 x++;                        //这句注释掉之后就不报错了
  11.                 System.out.println(x);
  12.         }
  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修饰引用数据类型时,只能保证该变量的引用不变,而该引用指向对象的内容是可以改变的。
回复 使用道具 举报
楼主您好,由于帖子长时间没有动态,我已经讲帖子改成已解决了,如有问题,可以私聊我。{:soso_e100:}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马