美文网首页java和c++的区别
java中的final 和C++中的const

java中的final 和C++中的const

作者: c7d122ec46c0 | 来源:发表于2017-04-18 11:29 被阅读0次

    之所以写这个实在是有感于C++ 中const的和java中final的有某些类似的情况
    初学java的人肯定有这种困惑,final作用于基础类型时的确是不可变的,但作用于对象引用时,却发现只能确保这个引用不能指向其他对象,当然从语义上来看的确没问题,在java中创建不可变对象是一个复杂的过程(参考String类的实现),然后在C++中创建一个不可变对象却非常容易,不可变对象在很多方面有着优势(安全等)。下面就讲讲这两个关键词的异同点。

    指向const对象的指针和引用

    //指向const对象的指针
    const Test t(10);
    const Test *p = &t;
    p->a = 12// error 假设Test 类有a属性
    //const  引用
    const int &p = 1;
    p = 2;//error
    

    指向const对象的指针和引用确保了不能通过这个指针或者引用修改对象。

    const 类型的指针

    int a = 1;
    int b = 2;
    int *const p1 = &1;
    int *p2 = &b;
    p1 = p2 //error
    *p1 = 3;//ok
    

    指向const 对象的 const 指针

    const int i = 3;
    const int * const p = &i;
    

    指向const 对象的 const 指针 能够保证不能通过改指针修改对象和修改指针指向。

    java 中的final 引用

     final Test a = new Test(3);
     a.a = 4;
    

    不难看出 在java的final引用跟C++中的const指针效果上是一样的。

    总结

    通过以上的分析我们可以看到在java相比C++少了一种场景,比如某个对象实际是可变的,我们需要限制其他用户对他做出改变,在c++ 可以传递const 指针 或者const 引用,而在java中并不存在现成的机制去确保我们通过引用无法修改一个可变对象。(好久没看c++了,如果有什么问题欢迎大家指出)

    相关文章

      网友评论

        本文标题:java中的final 和C++中的const

        本文链接:https://www.haomeiwen.com/subject/kvitzttx.html