解决方案 »

  1.   

    不知道LZ为什么需要考虑这种情况,一般来说,使用者不能通过get方法来改变数据成员啊,当然通过反射和复写除外对于第一问,一种我认为非常勉强的方法是public int getData() {

    final int d = data;
    return d;
    }事实上,我觉得这个没多大意义~第二问答案是否定的,因为set中的data是个形参,和类的成员data是两个不同的变量~
      

  2.   

    第一个java没有cpp的const机制  要靠你自己检查了第二个 int是值传递的  传参时会复制一份
      

  3.   

    话说java编译器没有这种功能吧,编译的时候还检查这事情?按我的理解。基本类型变量在赋值的时候都是产生全新的一个数据,不会前后影响,所以加不加final都是一样的。
      

  4.   

    这个要靠你自己实现吧。。
    既然你用get和set方法,那就应该是实现者的责任来确保合理操作,你怎么倒把责任往编译器上推。。
    如果你这方法很长很复杂你自己又怕写代码不小心,那1L的办法也行,在最前面就用局部变量做一个copy,之后不再操作类成员。
    public int getData() {     
        final int d = data;
        return d;
    }
      

  5.   

    你在构造器里先设置这个参数,然后封装他 不提供setter方法就可以
      

  6.   

    在C++中,如果想要确保一个函数不改变类的数据成员,那么在函数声明后面加一个const即可,如果试图在该函数中修改数据成员,编译器就会报错。如int getData() const { } , 但是在JAVA中,貌似没有这种机制?
      

  7.   

    方法前面加final,不是表示不可重写的意思吗?
      

  8.   

    对于第一问,我的意思是“程序员本身是不想在getData()这个方法中,修改任何数据成员的“,但是一旦代码长了,可能就会乱了。我之前学的C/C++,它是在函数后面加一个const,这样就能确保该函数不改变数据。想问一下java有没有这种机制。第二个问题请忽略之,加了final就能确保基本数据类型的参数不改变了
      

  9.   

    我来总结一下吧。JAVA中并不像C++那样能确保你的方法(或函数)不去改变类的数据成员,如果确实怕方法中会改变数据成员,可以先复制一份,再在这个副本上进行操作,这些都得靠程序员自己去完成,而不能依赖于编译器。但是如果是引用型的变量,那么这个复制的操作就会比较耗资源了。
      

  10.   

    你多写点Java代码就知道了~
    我觉得你的担心完全是多余的!
      

  11.   

    你多写点Java代码就知道了~
    我觉得你的担心完全是多余的!正在学习中,请多指教!这是JAVA面试题(不是我举的例子,而是方法中不改变数据成员)