文档章节

java的修饰引用变量的final和C++的const区别真的很大

zray4u
 zray4u
发布于 2016/08/16 12:25
字数 493
阅读 26
收藏 0

Bug ID: JDK-4211070 Java should support const parameters (like C++) for code maintainence http://bugs.java.com/bugdatabase/view_bug.do?bug_id=4211070

A reference variable or constant declared as 'final'
has a value that is immutable and cannot be modified to
refer to any other object than the one it was
initialized to refer to.  Thus the 'final' specifier
applies to the value of the variable itself, and not to
the object referenced by the variable.
Only reference (non-primitive) types can have the
'const' specifier applied to them.  Primitive types
that need to be declared 'const' should be declared
'final' instead.

下面是自己写的一个关于java的final关键字的例子。可以说明上面的性质。

注意上面的性质只是针对reference variable,对于 Primitive types(基本数据类型),final关键字的意义和C++中的const是相同的。

疑问:

一、java中有没有什么方法可以实现类似C++中const对于函数返回引用类型时不可更改的限定效果??

二、C++中返回了const对象的引用,要将一个const对象引用赋值给一个非const引用是需要一定的技巧的。不能直接赋值。相关技术:指针,C++中的强制类型转换。由此可见const修饰只是让修改某个数据的限制增大,在C++中通过指针操作等,还是可以修改const变量的值的。难道这也是java中不使用const的原因??

三、在java中对于对象的引用的传递要时刻小心,尽可能减少直接传递对象的引用,而返回相应的数据域等。总之,遵循只传递方法完成功能所需的最少数据的原则。

class Base{
    private int data;
    
    public Base(int n){
        this.data=n;
    }
    public boolean setData(int data){
        this.data=data;
        if(this.data==data) return true;  //这样写真的好吗??
        else return false;
    }
    
    public int getData(){
        return this.data;
    }
    

}
public class FinalKeyWordsTest{
    
    public static void main(String[] args){
        final Base base=new Base(12);
        base.setData(13);
        System.out.println(base.getData());
                
        //错误: 无法为最终变量base分配值
        //base=new Base(11);  //can't do this on a final refernece varible.
        
    }

}

© 著作权归作者所有

共有 人打赏支持
zray4u
粉丝 0
博文 208
码字总数 187679
作品 0
西城
线程局部存储空间 pthread_key_t、__thread 即 ThreadLocal

线程局部存储空间 pthreadkeyt、_thread 即 ThreadLocal thread 参考: 线程局部变量 _thread 关键字 thread是GCC内置的线程局部存储设施,thread变量每一个线程有一份独立实体,各个线程的值...

呆呆的张先生
08/30
0
0
云妹总结了一些最最最常见的Java面试题供大家参考

云妹导读:String和StringBuffer、StringBuilder的区别是什么?String为什么是不可变的? String和StringBuffer、StringBuilder的区别 可变性 String类中使用字符数组:private final cha...

阿里云科技快讯
08/17
0
0
最最最常见的Java面试题总结——第二周

String和StringBuffer、StringBuilder的区别是什么?String为什么是不可变的? String和StringBuffer、StringBuilder的区别 可变性   String类中使用字符数组:保存字符串,所以String对象是...

Amsour丶
08/13
0
0
Java中的引用和C++中引用的区别

用过java和C++的同学都知道在二者中均有引用的概念。但是这两个概念所代表的并不相同。 首先了解C++ 中引用的含义:“引用”即“别名”。C++中的引用代表的就是实际的存储空间。对其进行操作...

osDaniel
2013/12/02
0
0
Android JNI(一)——NDK与JNI基础

本系列文章如下: Android JNI(一)——NDK与JNI基础 Android JNI学习(二)——实战JNI之“hello world” Android JNI学习(三)——Java与Native相互调用 Android JNI学习(四)——JNI的常用方法...

隔壁老李头
05/09
0
0

没有更多内容

加载失败,请刷新页面

加载更多

区块链教程以太坊源码分析chain-indexer区块链索引一

兄弟连区块链教程以太坊源码分析chain-indexer区块链索引一 chain_indexer 区块链索引 chain_indexer.go 源码解析 chain_indexer 顾名思义, 就是用来给区块链创建索引的功能。 之前在eth协议...

兄弟连区块链入门教程
14分钟前
1
0
社会化分享插件集成分享

一.前提摘要 社会化分享每个app必备的推广需求,无论是拉新,邀请,游戏奖励,等等都离不开分享的影子,下面我们介绍下社会化分享的插件; 首先要说下,现在的社交App,社区App等,国内外的...

佳妮
15分钟前
1
0
IOC 之 Spring 统一资源加载策略

统一资源:Resource org.springframework.core.io.Resource 为 Spring 框架所有资源的抽象和访问接口 它继承 org.springframework.core.io.InputStreamSource接口 作为所有资源的统一抽象,S...

职业搬砖20年
15分钟前
1
0
Python爬虫实战入门一:工具准备

一、基础知识 使用Python编写爬虫,当然至少得了解Python基本的语法,了解: 基本数据结构 数据类型 控制流 函数的使用 模块的使用 不需要过多过深的Python知识,仅此而已。 个人推荐《Pytho...

糖宝lsh
19分钟前
1
0
Hanlp中使用纯JAVA实现CRF分词

Hanlp中使用纯JAVA实现CRF分词 与基于隐马尔可夫模型的最短路径分词、N-最短路径分词相比,基于条件随机场(CRF)的分词对未登录词有更好的支持。本文(HanLP)使用纯Java实现CRF模型的读取与...

左手的倒影
21分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部